java中-5>>2等于-1是为什么?

2024-11-26 13:38:48
推荐回答(5个)
回答1:

在数据不溢出的情况下,<<1相当于乘以2,>>1相当于除以2。-5>>2就相当于-5除以2再除以2,这是个整型,所以-5/2得-2,再除以2就得-1了。当然如果转为二进制再平移更容易理解。

回答2:

-5的二进制表示是(-........0101)
-5>>2表示,-5右移两位二进制,最右边两位移出,左边补0,符号位不变,
二进制结果是(-.....0001),就是十进制的-1了。

回答3:

java中-5>>2等于-2不等-1,问题就错了

回答4:

-5原码:10000101,反码11111010,补码11111011
>>:带符号右移。正数右移高位补0,负数右移高位补1(按照原来最高的位置来补)
-5的补码(11111011)右移2位得到:11111110
11111110(补码)->11111101(反码)->10000010(原码)->-2

回答5:

我猜测可能是移位运算里符号位不移动。
只看 1000 0101 的后四位的话,0101右移2位为1,如果符号位不移动则结果是 1000 0001,这的确是十进制的-1。
符号位如果也要移动的话那就很诡异了。
1000 0101右移2位得到 0010 0001,这是十进制的33。