我正在尝试将integer.MAX_VALUE
(即2147483647)乘以2.当我执行程序时,它显示integer.MAX_VALUE
为-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)来尝试。