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