java中移位运算符

java中有三种移位运算符:

<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐

移位操作符操作的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型,左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0),“有符号”右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移。“有符号”右移位操作符使用“符号扩展”;若符号位正,则在高位插入0;若符号位负。则在高位插入1。java中增加了一种“无符号”右移位操作符(>>>),他使用“零扩展”;无论正负,都在高位插入0。这一操作符是C或C++中所没有的。

例如 5<<2 等于20
5的二进制是 0000 0000 0000 0101
左移两位 0000 0000 0001 0100
例如 5>>2 等于 1
5的二进制是 0000 0000 0000 0101
右移两位 0000 0000 0000 0001
例如 -5>>2 等于 -2
-5的二进制是 1111 1111 1111 1011
右移两位 1111 1111 1111 1110 转十进制,例5反着来,先-1,然后取反

>>> 就不举例了。和例7大同小异。
如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转为int类型,并且得到结果也是一个int类型的值,只有数值右端的底5位才有用,这样可防止我们移位超过int类型所具有的位数,(因为2的5次方位为32,而int类型只有32位)。若对一个long类型的数值进行处理,最后得到结果也是long类型,此时只会用到数值右端的底6位,以防止移位超过long类型数值具有的位数。
“移位”可与“等号”(<<=或>>=或>>>=)组合使用。此时,操作符左边的值会移动由右边的值指定的位数,再将得到的结果赋值给左边的变量。但在进行“无符号”右移位结合赋值操作时,可能会遇到一个问题,如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。他们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到-1的结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值