【问题标题】:Why -2>>>1 equals 2147483647 in Java为什么 -2>>>1 在 Java 中等于 2147483647
【发布时间】:2016-05-14 20:47:58
【问题描述】:
-2的补码是100000...01
-2 的补码是 1000000...10
-2 >>> 1
根据>>>定义左移0
应该是01000......1,为什么变成0111111..11?
【问题讨论】:
标签:
java
operator-keyword
twos-complement
ones-complement
【解决方案1】:
为了产生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
这正是你得到的结果。