Java中short,byte使用>>>的问题
发现问题
在下面的代码块中:
short s = -1;
s >>>= 1;
b对应的二进制位1111 1111 1111 1111,进行逻辑右移之后期望的值应为0111 1111 1111 1111,即32767,而实际输出却是-1,即1111 1111 1111 1111.
猜想1:右操作数1是int型,>>>运算前将s提升到int型
于是,我将代码修改成了
short s = -1;
int temp = s >>> 1;
经过debug测试发现temp为2147483647,似乎证实了猜想1,接着我再次修改代码,阻止s提升为int
short s = -1;
int temp = s >>> (short)1;
预想中我的此次结果应为0000 0000 0000 0000 0111 1111 1111 1111 1111,即32767,但实际得到的结果却是0111 1111 1111 1111 1111 1111 1111 1111,即2147483647。
猜想2:>>>的右操作数固定为int型
代码如下
short s = -1;
int temp = s >>> (short)1;
long temp2 = s >>> (long)1;
经过断点测试,temp和temp2的值均为2147483647,接着,我再次测试了如下代码
long l = -1;
long temp = l >>> 1;
断点测时temp的结果为9223372036854775807
总结
在java中>>>的右操作数固定为int类型,此时若左操作数为byte,short类型则会被提升至int型再运算