Java Bitshift操作:将int转换为byte出错



谁能告诉我为什么下面的代码抛出编译错误"不能从int转换到字节"?

byte x = 2;  
byte y = (x >> 1);

我的意思是我明确地将x和y声明为字节,并且'x>> 1'将计算为1,即仍然在一个字节的范围内。
当我输入

byte x = -2;  
System.out.println(x >>> 1);

我希望结果是126,因为我在b1111 1101的最左边移了一个0,也就是0111 1110。但是控制台正在打印"2147483647",因此看起来我的字节在0被移进来之前已经转换为整数。为什么呢?

仅仅因为x >> 1返回int,所以您只需要将其显式转换为byte作为next:

byte y = (byte)(x >> 1);

还请注意,由于它是int操作符(或long取决于规范中的左操作符§15.19),它的所有操作数必须是int类型,这意味着在您的情况下,x也将隐式转换为int,换句话说,x >> 1相当于(int)x >> 1

最新更新