lic*_*nbo 8 c++ integer overflow
当我在使用GCC of MinGW编译的Windows7 x64下运行以下代码时,结果似乎是下溢的:
cout<<-2147483648 ; //Output: 2147483648
Run Code Online (Sandbox Code Playgroud)
但是当我将它分配给整数变量时,或者只是简单地将其转换为int类型:
cout<<(int)-2147483648 ; //Output: -2147483648
Run Code Online (Sandbox Code Playgroud)
那么,我的代码的先前版本出了什么问题?我不是int类型吗?或整数的下界究竟是什么?非常感谢.
小智 11
2147483648不适合系统中的int或long,因此它被视为unsigned long类型的常量.(编辑:正如ouah在评论中指出的那样,它是标准C++中的未定义行为,但是你的编译器接受它作为扩展.)可以否定无符号整数值,但会产生另一个无符号整数值,绝不是负数.否定2147483648UL产生2147483648UL(假设,在您的系统上,无符号长整数是32位类型).
转换它以int产生实现定义的结果,通常是您看到的结果,但不一定.您可以通过编写-2147483647 - 1来获得所需的结果而无需任何转换.
| 归档时间: |
|
| 查看次数: |
4182 次 |
| 最近记录: |