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

时间:2016-11-08 17:48:07

标签: java type-conversion bit-shift

有人可以告诉我为什么以下代码抛出编译错误"无法从int转换为byte"?

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

我的意思是我清楚地将x和y都声明为字节,并且' x>> 1'将评估为1,即仍然在一个字节的范围内 当我做像

这样的事情的时候
byte x = -2;  
System.out.println(x >>> 1);

我希望126会成为结果,因为我在0的最左边的位b1111 1101移了一个0111 1110。但是控制台正在打印' 2147483647',所以看起来我的字节在0移入之前已经转换为整数。为什么会这样?请帮帮我。

1 个答案:

答案 0 :(得分:4)

只是因为x >> 1会返回int所以您只需将其明确地转换为byte作为下一个:

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

请注意,由于它是int运算符(或long,具体取决于规范中的左侧操作符cf §15.19),因此其所有操作数必须为{ {1}}这意味着,在您的情况下,int也会隐式转换为x,换句话说int相当于x >> 1