>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;(补的数依当前符号位来定,符号位也会被移动)
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
表达式为:result = exp1 >> exp2; result = exp2 >>> exp2; 表示把数exp1向右移动exp2位。
以下例子假设该数为2个字节的整数(short int)
例一:20 >> 2
补码:00000000,00010100 右移:00000000,00000101(高位补0) 结果:5
例二:-20 >> 2
-20的补码为其反码加1(负数的反码是对其原码逐位取反,但符号位除外)
step1 原码:10000000,00010100 反码:11111111,11101011
补码:11111111,11101100 移位:11111111,11111011(高位补1)
step2 减一得反码:11111111,11111010 取反得原码:10000000,0000101 结果:-5
例三:20 >>> 2
补码:00000000,00010100 右移:00000000,00000101(高位补0) 结果:5
例三:-20 >>> 2
step1 原码:10000000,00010100 反码:11111111,11101011
补码:11111111,11101100 移位:00111111,11111011(高位补0)
step2 由于是无符号移位,故此时结果为移位后的结果16379