有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java位无符号移位(>>>>)会产生奇怪的结果

我有这个密码:

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),但事实并非如此。我的假设错了吗


共 (1) 个答案

  1. # 1 楼答案

    包括>>>的移位运算符对int进行操作。b的值是-1,因为byte是有符号的,所以在移位之前提升为int。这就是你看到结果的原因

    255重新解释为-1的原因是255的所有八位都设置为一。当您将其分配给有符号8位类型的byte时,它被解释为遵循two's complement规则的-1