Java中的无符号右移

时间:2014-01-21 08:33:49

标签: java bitwise-operators bit-shift

简单的问题:为什么如果我将Java中的无符号右移应用于字节变量(以及简短),它会将其威胁为int:

byte x = -1;
System.out.println(x >> 2);
System.out.println(x >>> 1);
System.out.println(Integer.MAX_VALUE);

控制台输出:

-1
2147483647
2147483647

1 个答案:

答案 0 :(得分:5)

只能在Java中使用int和long的移位运算符(就像所有其他数字运算符一样),因此在移位之前,字节会自动转换为int。算术右移也会发生这种情况,但无论-1 >> 2是什么类型,-1都是-1,因为算术右移的二进制表示111...111仍然是111...111,而逻辑上移位它变为011...111,即移位类型的最大值。

PS:算术移位是有符号移位,逻辑移位是无符号移位。