移位操作摘要

概述:

移位操作都是在二进制层面进行操作的,需要具有一定二进制运算基础。有兴趣的小伙伴可以去研究研究《计算机组成原理》这本教材,网易公开课的《编译原理》也是不错的选择。

有符号左移运算符:<<

二进制数据整体左移一位,最低位补0。以整数8为例子:

8的二进制:1000
左移一位 : 8 <<1 
左移动后的二进制:0001 0000
0001 0000对应的十进制:
16= 0*2^7+0*2^6+0*2^5+1*2^4+0*2^3+0*2^2+0*2^1+0*2^0
= 1*2^4 = 2*(1*2^3) = 8<<1 = 2*8

左移运算遵循以上规律,所以 x<<n 就相当于 x*2^n

有符号右移运算符:>>

二进制数据整体右移一位,正数最高位补0,负数(补码形式存储)最高位补1。右移就是左移的逆操作,所以 x>>n 就相当于 x/2^n

无符号右移运算符:>>>

二进制数据整体右移一位,最高位始终补0,所以对正数而言和有符号右移效果一致,对负数而言大相径庭。

总结

作为一个java开发,虽然java已经实现了这三种运算符,且使用移位运算符计算更快。但是建议除非必须使用,否则还是不要用位移运算去进行计算操作。因为无形中就提升了代码阅读成本和维护成本

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值