java移位运算符总结

<<      :     左移运算符,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值