为什么 -2>>>1 在 Java 中等于 2147483647
Why -2>>>1 equals 2147483647 in Java
-2
的补码是100000...01
-2
的二进制补码是 1000000...10
-2 >>> 1
根据>>>
定义向左移0
应该是01000......1
,为什么变成了0111111..11
?
为了生成 2
的二进制补码表示(即 -2
的表示),您从 2
的表示开始,翻转其所有位,然后添加 1
到结果:
00000000000000000000000000000010 -- This is 2
11111111111111111111111111111101 -- This the inverse of 2
11111111111111111111111111111110 -- This is the inverse of 2, plus 1
-2
的二进制表示是11111111111111111111111111111110
(demo).
不带符号扩展将其右移一位产生
01111111111111111111111111111111
这正是您得到的结果。
-2
的补码是100000...01
-2
的二进制补码是 1000000...10
-2 >>> 1
根据>>>
定义向左移0
应该是01000......1
,为什么变成了0111111..11
?
为了生成 2
的二进制补码表示(即 -2
的表示),您从 2
的表示开始,翻转其所有位,然后添加 1
到结果:
00000000000000000000000000000010 -- This is 2
11111111111111111111111111111101 -- This the inverse of 2
11111111111111111111111111111110 -- This is the inverse of 2, plus 1
-2
的二进制表示是11111111111111111111111111111110
(demo).
不带符号扩展将其右移一位产生
01111111111111111111111111111111
这正是您得到的结果。