编程语言
首页 > 编程语言> > Java位无符号移位(>>>)给出奇怪的结果

Java位无符号移位(>>>)给出奇怪的结果

作者:互联网

这个问题已经在这里有了答案:            >            java bit manipulation                                    5个
我有以下代码:

int i = 255;
byte b = (byte) i;
int c;
System.out.println(Integer.toBinaryString( i));
System.out.println("b = " + b); // b = -1
c=b>>>1;
System.out.println(Integer.toBinaryString( c));
System.out.println(c);

但是我不明白它是如何工作的.我认为无符号转换到255(11111111)应该会给我127(0111111),但事实并非如此.我的假设错了吗?

解决方法:

包括>>>的移位运算符在整数上操作. b的值(因为字节是有符号的,因此为-1)在移位之前被提升为int.这就是为什么您看到看到的结果的原因.

255重新解释为-1的原因是255的所有八位都设置为1.当您将其分配给带符号的8位字节类型时,将遵循two’s complement规则将其解释为-1.

标签:byte-shifting,java
来源: https://codeday.me/bug/20191029/1962473.html