ฉันมีโปรแกรมง่ายๆด้านล่าง:
#include <stdio.h>
#define INT32_MIN (-0x80000000)
int main(void)
{
long long bal = 0;
if(bal < INT32_MIN )
{
printf("Failed!!!");
}
else
{
printf("Success!!!");
}
return 0;
}
เงื่อนไขif(bal < INT32_MIN )
เป็นจริงเสมอ มันเป็นไปได้ยังไงกัน?
มันทำงานได้ดีถ้าฉันเปลี่ยนแมโครเป็น:
#define INT32_MIN (-2147483648L)
ใครสามารถชี้ให้เห็นปัญหา
-0x80000000
แต่เท็จ-0x80000000L
, -2147483648
และ-2147483648L
(GCC 4.1.2) ดังนั้นคำถามคือทำไมเป็น int ตัวอักษร -0x80000000
ที่แตกต่างจากตัวอักษรนั้น int -2147483648
?
<limits.h>
กำหนดINT_MIN
เป็น(-2147483647 - 1)
ตอนนี้คุณรู้ว่าทำไม
CHAR_BIT * sizeof(int)
?