บทนำ
ปัญหาคือจำนวนเต็มล้น หากล้นระบบจะกลับไปที่ค่าต่ำสุดและดำเนินการต่อจากที่นั่น ถ้ามันมากเกินไปมันจะกลับไปที่ค่าสูงสุดและดำเนินการต่อจากที่นั่น ภาพด้านล่างเป็นของเครื่องวัดระยะทาง ฉันใช้สิ่งนี้เพื่ออธิบายการล้น มันเป็นกลไกล้น แต่ยังคงเป็นตัวอย่างที่ดี
ในมาตรวัดระยะทางmax digit = 9
ดังนั้นจะไปไกลกว่าค่าเฉลี่ยสูงสุด9 + 1
ซึ่งนำไปและให้0
; แต่มีหลักไม่สูงมีการเปลี่ยนแปลงไปดังนั้นรีเซ็ตเคาน์เตอร์เพื่อ1
zero
คุณจะได้แนวคิด - "จำนวนเต็มล้น" ในใจตอนนี้
ตัวหนังสือทศนิยมที่ใหญ่ที่สุดของชนิด int เป็น 2147483647 (2 วันที่ 31 -1) ลิเทอรัลทศนิยมทั้งหมดตั้งแต่ 0 ถึง 2147483647 อาจปรากฏขึ้นที่ใดก็ได้ที่อินเทอรัลอาจปรากฏขึ้น แต่ลิเทอรัล 2147483648 อาจปรากฏเป็นตัวถูกดำเนินการของโอเปอเรเตอร์เอกพจน์เท่านั้น -
หากการบวกจำนวนเต็มมากเกินไปผลลัพธ์ที่ได้คือบิตลำดับต่ำของผลรวมทางคณิตศาสตร์ตามที่แสดงในรูปแบบส่วนเติมเต็มสองขนาดที่ใหญ่พอสมควร หากเกิดโอเวอร์โฟลว์เครื่องหมายของผลลัพธ์จะไม่เหมือนกับเครื่องหมายของผลรวมทางคณิตศาสตร์ของค่าตัวถูกดำเนินการสองค่า
ดังนั้นล้นและล้อมรอบไป2147483647 + 1
-2147483648
ดังนั้นจะล้นซึ่งไม่เท่ากับint i=2147483647 + 1
2147483648
นอกจากนี้คุณยังพูดว่า "มันพิมพ์ 0 เสมอ" มันไม่ได้เพราะhttp://ideone.com/WHrQIW ด้านล่างตัวเลข 8 ตัวนี้แสดงจุดที่หมุนและล้น จากนั้นจะเริ่มพิมพ์ 0 วินาที นอกจากนี้อย่าแปลกใจว่ามันคำนวณได้เร็วแค่ไหนเครื่องจักรในปัจจุบันนั้นรวดเร็ว
268435456
536870912
1073741824
-2147483648
0
0
0
0
เหตุใดจำนวนเต็มจึงล้น "ล้อมรอบ"
PDF ต้นฉบับ