-2147483648 เป็นจำนวนเต็มที่น้อยที่สุดสำหรับประเภทจำนวนเต็มด้วย 32 บิต แต่ดูเหมือนว่าจะล้นในif(...)
ประโยค:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
สิ่งนี้จะพิมพ์ออกมาtrue
ในการทดสอบของฉัน อย่างไรก็ตามหากเราส่ง -2147483648 ไปเป็นจำนวนเต็มผลลัพธ์จะแตกต่างกัน:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
false
นี้จะพิมพ์
ฉันสับสน ใครสามารถให้คำอธิบายเกี่ยวกับเรื่องนี้?
อัปเดต 02-05-2012:
ขอบคุณสำหรับความคิดเห็นของคุณในคอมไพเลอร์ของฉันขนาดของ int คือ 4 ไบต์ ฉันใช้ VC เพื่อทดสอบอย่างง่าย ฉันเปลี่ยนคำอธิบายในคำถามของฉัน
นั่นเป็นคำตอบที่ดีมากในโพสต์นี้AndreyTให้คำอธิบายโดยละเอียดเกี่ยวกับวิธีคอมไพเลอร์จะทำงานกับอินพุตเหล่านี้อย่างไรและวิธีการใช้จำนวนเต็มขั้นต่ำนี้ qPCR4virในอีกทางหนึ่งให้ "ความอยากรู้" ที่เกี่ยวข้องและวิธีการแสดงจำนวนเต็ม น่าประทับใจมาก!
INT_MIN
ของ-9223372036854775808
ถ้าCHAR_BIT
เป็น 16 และแม้จะมีCHAR_BIT == 8
และsizeof(int
== 4) `คุณอาจได้รับ-9223372036854775807
เพราะ C ไม่ต้องใช้หมายเลข 2 เสริม