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

Java Bitshift Operation: error converting int to byte

谁能告诉我为什么下面的代码会抛出编译错误 "cannot convert from int to byte"?

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 returns 一个 int 所以你只需要将它明确地转换为 byte 如下:

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

还请注意,由于它是一个 int 运算符(或 long,具体取决于规范中的左手操作符 cf §15.19),它的所有操作数都必须是输入 int 这意味着在您的情况下 x 也将隐式转换为 int 换句话说 x >> 1 等同于 (int)x >> 1