谁能告诉我为什么下面的代码抛出编译错误"不能从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