有人可以告诉我为什么以下代码抛出编译错误"无法从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
移入之前已经转换为整数。为什么会这样?请帮帮我。
答案 0 :(得分:4)
只是因为x >> 1
会返回int
所以您只需将其明确地转换为byte
作为下一个:
byte y = (byte)(x >> 1);
请注意,由于它是int
运算符(或long
,具体取决于规范中的左侧操作符cf §15.19
),因此其所有操作数必须为{ {1}}这意味着,在您的情况下,int
也会隐式转换为x
,换句话说int
相当于x >> 1