今天给大家分享运算符>>和>>>的区别
举例
首先我们先看下例子:
public class ShiftOperatorTest {
public static void main(String[] args) {
int a = 8;
System.out.println("a >> 1 = " + (a >> 1));
System.out.println("a >>> 1 = " + (a >>> 1));
}
}
运行结果:
a >> 1 = 4
a >>> 1 = 4
结果都是一样;下面我们再看个负数的例子:
public class ShiftOperatorTest {
public static void main(String[] args) {
int a = -8;
System.out.println("a >> 1 = " + (a >> 1));
System.out.println("a >>> 1 = " + (a >>> 1));
}
}
运行结果:
a >> 1 = -4
a >>> 1 = 2147483644
分析
运算符>>和>>>都是右运算符,当对一个正数右移的时候,结果是一样的;对一个负数右移的时候结果就不一样了,-8进行>>>右移1位最后结果变为了正数,说明跟最高位的符号位有关,符号位变为了0。
分析验证:
二进制 :0000 0000 0000 0000 0000 0000 0000 1000 => 8
右移>> :0000 0000 0000 0000 0000 0000 0000 0100 => 4
右移>>> :0000 0000 0000 0000 0000 0000 0000 0100 => 4
二进制 :1111 1111 1111 1111 1111 1111 1111 1000 => -8
右移>> :1111 1111 1111 1111 1111 1111 1111 1100 => -4 (高位补1)
右移>>> :0111 1111 1111 1111 1111 1111 1111 1100 => 2147483644(高位补0)
总结
- 运算符>>,是带符号右移,正数补0,负数补1
- 运算符>>>,是无符号右移,都补0