乘以integer.MAX_VALUE

时间:2012-09-01 15:37:05

标签: integer

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

为什么是-2?

2 个答案:

答案 0 :(得分:6)

许多现代计算机体系结构将二进制的整数表示为two's complement

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

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

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

答案 1 :(得分: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

我建议的另一个实验是使用unsigned int(uint)来尝试。