Java short 无符号右移_关于java中位运算的左移、右移、无符号右移

今天学到了java中的位运算,和C语言还是有所不同的:

<< :左移运算符,num<<1,相当于num*2;

>>:右移运算符,num>>1,相当于num/2;

>>>:无符号右移,忽略符号位,空位以0补齐。

位运算的一些规则:

1.byte、short、char在做移位运算之前,会被自动转换为int类型,然后再进行运算。

2.byte、short、int、char类型的数据经过移位运算后结果都为int型。

3.long经过移位运算后结果为long型。

4.在左移位(<

5.对于有符号右移位(>>)运算和无符号右移位(>>>)运算,当要移位的位数大于被操作数对应数据类型所能表示的最大位数时,那么先将要求移位数对该类型所能表示的最大位数求余后,再将被操作数移位所得余数对应的数值,效果不变。。比如100>>35=100>>(35%32)=100>>3=12。

因为如果移位的位数超过了该类型的最大位数,那么有效信息就全没了,这种移位是毫无用处的。

而对于无符号右移的一个应用场景:

对01111100 11100010 00101111 10101010,按照四位取值,此时需要用到右移和按位与,此时不适合使用>>,而应该使用>>>,因为如果是负数的话,>>就不会不断移入有效位,而使用>>>等全移入0时可知数据全部移动完毕(该应用场景有可能有疏漏),而且经常会使用的是无符号右移。

对变量进行位运算不会改变变量的值,除非是复合赋值表达式。

另外,位预算对非2的模、幂场景不适用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值