我正在尝试将integer.MAX_VALUE
(即 2147483647)乘以 2。当我执行程序时,它显示integer.MAX_VALUE
为 -2。
为什么是-2?
许多现代计算机体系结构将二进制整数表示为二进制补码。
将 2147483647 添加到自身会导致溢出,从而导致 -2 表示。
011111111111111111111111
+011111111111111111111111
-------------------------
111111111111111111111110
从上面你可以看到符号位(第一个)现在是 1,表示负数,除最后一个之外的所有其他位都是 1,一起表示二进制补码中的 -2。
带符号的 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) 进行尝试。