简单的问题:为什么如果我将Java中的无符号右移应用于字节变量(以及简短),它会将其威胁为int:
byte x = -1;
System.out.println(x >> 2);
System.out.println(x >>> 1);
System.out.println(Integer.MAX_VALUE);
控制台输出:
-1
2147483647
2147483647
答案 0 :(得分:5)
只能在Java中使用int和long的移位运算符(就像所有其他数字运算符一样),因此在移位之前,字节会自动转换为int。算术右移也会发生这种情况,但无论-1 >> 2
是什么类型,-1
都是-1,因为算术右移的二进制表示111...111
仍然是111...111
,而逻辑上移位它变为011...111
,即移位类型的最大值。
PS:算术移位是有符号移位,逻辑移位是无符号移位。