为什么Integer.MIN_VALUE * 2
等于0
?
Integer.MAX_VALUE * 2
等于-2
?
让我更好地解释一下:
我知道它溢出了,但为什么会得到这些特定的结果呢?
答案 0 :(得分:22)
Integer.MIN_VALUE= -2147483648
。看看2 * -2147483648
Integer.MIN_VALUE*2 = Integer.MIN_VALUE+Integer.MIN_VALUE
-2147483648= 10000000 00000000 00000000 00000000 ->32 bit
+10000000 00000000 00000000 00000000
_________________________________________________________________
2* -2147483648= 1 00000000 00000000 00000000 00000000 Result is 0
|
This bit will be omitted due to limitation of 32 bit
Integer.MAX_VALUE=2147483647
,看看2 * 2147483647
Integer.MAX_VALUE*2 = Integer.MAX_VALUE+Integer.MAX_VALUE
2147483647= 01111111 11111111 11111111 11111111 ->32 bit
+01111111 11111111 11111111 11111111
_________________________________________________________________
2* 2147483647= 11111111 11111111 11111111 11111110 Result is -2
答案 1 :(得分:3)
scala> println(Integer.MAX_VALUE)
2147483647
scala> println(Integer.MIN_VALUE)
-2147483648
所以,Integer.MIN_VALUE
= - (Integer.MAX_VALUE
+ 1)
所以,如果MIN_VALUE + MIN_VALUE = 0
,那么MAX_VALUE + MAX_VALUE = 0 - 1 - 1 = -2
答案 2 :(得分:1)
在计算机系统中,值以互补码键控表示 积极是自己的补充 补语等于你否定的原始代码的负数的绝对值,以及
的整数1