【发布时间】:2016-03-14 22:53:55
【问题描述】:
我有一个简单的程序:
#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)
谁能指出问题?
【问题讨论】:
-
CHAR_BIT * sizeof(int)多少钱? -
你试过打印出bal吗?
-
恕我直言,更有趣的是它 only 对于
-0x80000000,但对于-0x80000000L、-2147483648和-2147483648L是错误的(gcc 4.1.2 ),所以问题是:为什么 int 文字-0x80000000与 int 文字-2147483648不同? -
@Bathsheba 我只是在在线编译器上运行程序tutorialspoint.com/codingground.htm
-
如果你曾经注意到
<limits.h>的(一些化身)将INT_MIN定义为(-2147483647 - 1),现在你知道为什么了。
标签: c signed numeric-limits numeric-conversion