-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
of -9223372036854775808
,如果CHAR_BIT
为16。即使使用CHAR_BIT == 8
and sizeof(int
== 4),也可能会得到,-9223372036854775807
因为C不需要2补码。