<<:表示左移,不分正负数,低位补0。
如:8<<2 -> 8<<1=16 -> 16<<1=32
-8<<2 -> -8<<1= -16 -> -16>>1= -32
>>:带符号右移。正数右移高位补0,负数右移高位补1。
如:8>>2 -> 8>>1=4 -> 4>>1=2
-8>>2 -> -8>>1= -4 -> -4>>1= -2
>>>:无符号右移。无论是正数还是负数,高位通通补0。
4=1111 1111 1111 1111 1111 1111 1111 1100,
>>1=1111 1111 1111 1111 1111 1111 1111 1110=-2,
>>>1=0111 1111 1111 1111 1111 1111 1111 1110=2147483646,而不是-2。
-----------
-1=1111 1111 1111 1111 1111 1111 1111 1111,
>>1=1111 1111 1111 1111 1111 1111 1111 1111=-1,
>>>1=0111 1111 1111 1111 1111 1111 1111 1111=2147483647,而不是-1。
简单理解:
a << 1 相当于a乘以2,正负数据符号不变。
a >> 1 相当于除以2,正负数据符号不变。
>>> 不考虑高位的正负号,正数的 >>> 等同于 >>