为什么-2>>> 1等于Java中的2147483647

时间:2016-02-05 00:59:18

标签: java operator-keyword twos-complement ones-complement

-2的补充是100000 ... 01

-2的补充是1000000 ... 10

-2 >>> 1 

根据>>>定义左侧移位0

应该是01000......1,为什么变成0111111..11

1 个答案:

答案 0 :(得分:10)

为了生成2(即-2表示)的两个补码表示,您从2的表示开始,翻转其所有位,并将1添加到结果中:

00000000000000000000000000000010 -- This is 2
11111111111111111111111111111101 -- This the inverse of 2
11111111111111111111111111111110 -- This is the inverse of 2, plus 1

-2的二进制表示形式为11111111111111111111111111111110demo)。

将其向右移动一个没有符号扩展的产生

01111111111111111111111111111111

这正是你得到的结果。