1

我正在尝试将integer.MAX_VALUE(即 2147483647)乘以 2。当我执行程序时,它显示integer.MAX_VALUE为 -2。

为什么是-2?

4

2 回答 2

6

许多现代计算机体系结构将二进制整数表示为二进制补码

将 2147483647 添加到自身会导致溢出,从而导致 -2 表示。

 011111111111111111111111
+011111111111111111111111
-------------------------
 111111111111111111111110

从上面你可以看到符号位(第一个)现在是 1,表示负数,除最后一个之外的所有其他位都是 1,一起表示二进制补码中的 -2。

于 2012-09-01T15:39:12.000 回答
0

带符号的 32 位整数。0111 1111 1111 1111 1111 1111 1111 1111 *2 1111 1111 1111 1111 1111 1111 1111 1110

第一位代表符号。溢出会导致符号改变。

1111 1111 1111 1111 1111 1111 1111 1110 为-2

http://en.wikipedia.org/wiki/Integer_%28computer_science%29

我推荐的另一个实验是使用无符号整数 (uint) 进行尝试。

于 2012-09-01T15:45:53.240 回答