ฉันไม่สามารถหาแหล่ง "เผด็จการ" ในเรื่องนี้ส่วนใหญ่เป็นเพราะนี่อาจเป็นเรื่องของการประชุมและคำศัพท์มักจะไม่สอดคล้องกันมาก แต่ข้อความที่ตัดตอนมาจาก " Secure Coding ใน C และ C ++ " ของRobert Seacord สรุปความเข้าใจของฉันเกี่ยวกับสถานการณ์:
ล้นจำนวนเต็มเกิดขึ้นเมื่อจำนวนเต็มจะเพิ่มขึ้นเกินกว่าค่าสูงสุดหรือลดลงเกินกว่าค่าต่ำสุด3 ล้นจำนวนเต็มเกี่ยวข้องอย่างใกล้ชิดกับการเป็นตัวแทนพื้นฐาน
เชิงอรรถกล่าวต่อไปว่า:
[3] การลดจำนวนเต็มที่เกินกว่าค่าต่ำสุดของมันมักถูกเรียกว่าunderflowจำนวนเต็มแม้ว่าในทางเทคนิคคำนี้หมายถึงเงื่อนไขจุดลอยตัว
เหตุผลที่เราเรียกมันว่าเป็นจำนวนเต็มล้นเป็นเพราะมีเพียงไม่เพียงพอพื้นที่ที่มีอยู่ในประเภทที่จะแทนค่า ในแง่ที่ว่ามันคล้ายกับหน่วยความจำล้น (ยกเว้นมากกว่าจริงข้ามเขตแดนบัฟเฟอร์ก็มักจะแสดงพฤติกรรมห่อรอบ. *) จากมุมมองนี้ไม่มีความแตกต่างทางความคิดระหว่างและINT_MIN - 1
INT_MAX + 1
ในทั้งสองกรณีมีเพียงพื้นที่ไม่เพียงพอในint
ชนิดของข้อมูลที่จะเป็นตัวแทนทั้งค่า - ดังนั้นสิ่งที่เรามีเป็นล้น
นอกจากนี้ยังอาจมีประโยชน์ที่จะทราบว่าในสถาปัตยกรรมตัวประมวลผล x86 และ x86_64 การลงทะเบียนรวมถึงบิตล้น บิตโอเวอร์โฟลว์ถูกตั้งค่าเมื่อการดำเนินการทางคณิตศาสตร์จำนวนเต็มที่ลงนามล้น นิพจน์INT_MIN - 1
จะตั้งค่าบิตส่วนเกิน (ไม่มีบิต "อันเดอร์โฟลว์") ดังนั้นชัดเจนวิศวกรของ AMD และ Intel ใช้คำว่า "โอเวอร์โฟลว์" เพื่ออธิบายผลลัพธ์ของการดำเนินการทางคณิตศาสตร์จำนวนเต็มซึ่งมีบิตมากเกินไปที่จะพอดีกับชนิดข้อมูลโดยไม่คำนึงว่า ค่ามีขนาดใหญ่เกินไปหรือเล็กเกินไป
* ในความเป็นจริงใน C การโอเวอร์โฟลว์จำนวนเต็มที่ลงนามแล้วนั้นเป็นพฤติกรรมที่ไม่ได้กำหนด แต่ในภาษาอื่นเช่น Java การคำนวณทางคณิตศาสตร์ของทั้งสองจะถูกล้อมรอบ
INT_MIN - 1
หรือไม่INT_MAX + 1