Tôi có một chương trình đơn giản dưới đây:
#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;
}
Điều kiện if(bal < INT32_MIN )
luôn luôn đúng. Làm thế nào là nó có thể?
Nó hoạt động tốt nếu tôi thay đổi macro thành:
#define INT32_MIN (-2147483648L)
Bất cứ ai có thể chỉ ra vấn đề?
-0x80000000
, nhưng sai cho -0x80000000L
, -2147483648
và -2147483648L
(gcc 4.1.2), vì vậy câu hỏi là: tại sao là int đen -0x80000000
khác với int đen -2147483648
?
<limits.h>
định nghĩa INT_MIN
là (-2147483647 - 1)
, bây giờ bạn biết tại sao.
CHAR_BIT * sizeof(int)
?