C语言的32位int类型数据在运算过程中可能溢出,如下所示:
-2147483648-1会得到什么结果?
-2147483648(1)能得到什么结果?
2147483647 1会得到什么结果?
编译器执行的结果分别如下所示。
-2147483648-1=2147483647;
-2147483648(1)=2147483647
2147483647 1=-2147483648
说明发生这些情况的理由。
-2147483648的二进制文件为1000000000000000000000,a-1=10000000000000000000
很明显在这里溢出,结果为7FFFFFFFF。 用int表示的话是2147483647。
-2147483648*(-1 )相对于-2147483648逐位反转,得到7FFFFFFF即为2147483647。
2147483647的二进制文件表示为7FFFFFFF,加1等于80000000,即-2147483648。