在 Java 中,右移运算符有两种形式:">>" 和 ">>>"。这两种运算符的主要区别在于当进行右移操作时,左边的空位填充的是符号位(有符号右移)还是零(无符号右移)。
">>" 为有符号右移,它的运算规则为:将被操作数的二进制码整体右移指定的位数,右移后左侧的空位部分用符号位进行填充。例如:
intx= -10;
System.out.println(x >> 2);
这个程序会输出 -3。-10 的二进制码为 11111111 11111111 11111111 11110110(用补码表示),右移两位后得到 11111111 11111111 11111111 11111101,再转换成十进制数即为 -3。
">>>" 为无符号右移,它的运算规则为:将被操作数的二进制码整体右移指定的位数,右移后左侧的空位部分用 0 进行填充。例如:
intx= -10;
System.out.println(x >>> 2);
这个程序会输出 1073741821。-10 的二进制码为 11111111 11111111 11111111 11110110(用补码表示),右移两位后得到 00111111 11111111 11111111 11111101,再转换成十进制数即为 1073741821。可以看出,无符号右移相当于将有符号右移得到的结果再进行无符号化处理。