<< : 左移运算符,num << 1,相当于num乘以2。
>> : 右移运算符,num >> 1,相当于num除以2,
若是正数,二进制补码右移后,前面补0
若是负数,二进制补码右移后,前面补1
>>> : 无符号右移,忽略符号位,空位都以0补齐,
也就是说,不管是正数还是负数移后前面都补0
具体看下面的例子
对于整数:
任意正整数包括0 >> 31 结果为 0
任意负整数 >> 31 结果为 -1
(在32位系统中任何数左移(右移)32位还是它本身)
任意正整数包括0 >>> 31 结果为 0
任意负整数 >>> 31 结果为 1
所以,可以用如下方法判断两个数符号是否相同:
return ((a >> 31) ^ (b >> 31)) == 0;
N >> 1 当N为正整数或0时,表示对2整除;如:(2>>1=1)
N >> 1 当N为负数时,表示对2整除,保留负数符号;如:(-2>>1=-1)
N >>> 1 当N为正整数时,也表示对2整除;如:(2>>>1=1)
N >>> 1 当N为负数时,则进行 无符号右移 ;如:-2 >>> 1,结果是2147483647(Integer.MAX_VALUE)
eg:
128——-10000000(B)
右移1位( >>1)之后为01000000,右移2位(>>2)之后为00100000(0可以省略不写)
-2——-10000010(B)转换成补码为11111110,右移1位(>>1)为:11111111,转成原码为10000001,即为-1;
(>>>1)为:01111111(>>>2)为:00111111
2——-00000010,右移1位(>>1)为:00000001,即为1,右移2位(>>2),为:00000000,即为0
(>>>1)为:00000001,(>>>2)为:00000000
参考:
https://zhidao.baidu.com/question/518645479098394885.html
https://www.cnblogs.com/565261641-fzh/p/7686757.html