Java 中的无符号右移



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

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

控制台输出:

-1
2147483647
2147483647

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

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

最新更新