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