当我在Windows7 x64(使用MinGW的GCC编译)下运行以下代码时,结果似乎被下溢:
cout<<-2147483648 ; //Output: 2147483648
但是当我将其分配给整数变量时,或者只是将其转换为int类型:
cout<<(int)-2147483648 ; //Output: -2147483648
那么,我的代码的先前版本有什么问题?不是int类型吗?或整数的下界到底是多少?
非常感谢。
最佳答案
2147483648不适合系统中的int或long类型,因此将其视为unsigned long类型的常量。 (编辑:正如ouah在注释中指出的那样,它是标准C++中的未定义行为,但是您的编译器将其视为扩展。)可以对无符号整数值取反,但会导致另一个无符号整数值,而不是负数。取反2147483648UL会产生2147483648UL(假设像系统上的情况一样,unsigned long是32位类型)。
将其强制转换为int
会产生实现定义的结果,通常是您看到的结果,但不一定。通过编写-2147483647-1,您可以得到所需的结果而无需任何转换。
关于c++ - 为什么它在-2147483648和(int)-2147483648之间有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12620753/