我下面有一个简单的程序:
#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)
?