Java位移位操作:将int转换为字节时出错
有人能告诉我为什么下面的代码抛出编译错误“无法从int转换为byte”吗 我的意思是我清楚地将x和y都声明为字节,“x>>1”将计算为1,即仍然在一个字节的范围内。Java位移位操作:将int转换为字节时出错,java,type-conversion,bit-shift,Java,Type Conversion,Bit Shift,有人能告诉我为什么下面的代码抛出编译错误“无法从int转换为byte”吗 我的意思是我清楚地将x和y都声明为字节,“x>>1”将计算为1,即仍然在一个字节的范围内。 当我做一些类似的事情时 byte x = -2; System.out.println(x >>> 1); 我希望结果是126,因为我在b1111 1101最左边的位移动了0,即01111 1110。但是控制台正在打印“2147483647”,因此看起来我的字节在0移入之前已转换为整数。为什么呢?请帮助我。原
当我做一些类似的事情时
byte x = -2;
System.out.println(x >>> 1);
我希望结果是126,因为我在
b1111 1101
最左边的位移动了0
,即01111 1110
。但是控制台正在打印“2147483647
”,因此看起来我的字节在0
移入之前已转换为整数。为什么呢?请帮助我。原因很简单,因为x>>1
返回一个int
,所以您只需将其显式转换为字节,如下所示:
byte y = (byte)(x >> 1);
还请注意,由于它是一个int
运算符(或long
,取决于规范中的左侧运算符cf),它的所有操作数必须是int
类型,这意味着在您的情况下x
也将隐式转换为int
,换句话说x>>1
相当于(int)x>>1
原因很简单,因为x>>1
返回一个int
,所以您只需将其显式转换为字节,如下所示:
byte y = (byte)(x >> 1);
还请注意,由于它是一个int
运算符(或long
,取决于规范中的左侧运算符cf),它的所有操作数必须是int
类型,这意味着在您的情况下x
也将隐式转换为int
,换句话说x>>1
相当于(int)x>>1
1
的类型是int
。为什么?因为是这样的。请参见x>>1
的类型是int
。为什么?因为他是这么说的,看到了吗