Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java位移位操作:将int转换为字节时出错_Java_Type Conversion_Bit Shift - Fatal编程技术网

Java位移位操作:将int转换为字节时出错

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移入之前已转换为整数。为什么呢?请帮助我。原

有人能告诉我为什么下面的代码抛出编译错误“无法从int转换为byte”吗

我的意思是我清楚地将x和y都声明为字节,“x>>1”将计算为1,即仍然在一个字节的范围内。
当我做一些类似的事情时

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
。为什么?因为他是这么说的,看到了吗