C语言高级-位操作

第一点:

常用的位操作符:位与、位或、位取反、位异或、左移位、右移位;

位与是& 逻辑与是&& 位与时两个操作数是按照二进制位批次对应位相与的,逻辑与是两个操作数作为整体来相与的;(举例:0xAA&0xF0=0xA0, 0xAA&&0xF0=1,)

位或是| 逻辑或是|| 逻辑或与位或的区别与位与的概念是一样的;

位取反是~ 逻辑取反是! 位取反是1和0相互变换,逻辑取反是真假互换

位异或是^ (两数相等 结果为0 两数不等 结果为1)

第二点:

对寄存器特定位修改

对指定位清零,可以用位与; 对指定位置1,可以用位或;

使用移位获取特定位为1的二进制数

最简单的就是用移位来获取一个特定位为1的二进制数。譬如我们需要一个bit3~bit7为1(隐含意思就是其他位全部为0)的二进制数,可以这样(0x1f<<3)

解释:目标二进制数: 0000000011111000b

源二进制目标数:0000000000011111b 

通过把源向左位移三位,就可以得到最后的目标二进制数。

更难一点的要求:获取bit3~bit7为1,同时bit23~bit25为1,其余位为0的数:

((0x1f<<3)|(0x7<<23))

结合位取反获取特定位为0的二进制数

譬如:要获取bit4~bit10为0 其他位为1

利用上面的方法进行验证:((0xf<<0)| (0x1fffff<<11)) 这种方法的劣势就是太复杂了,当极少位数为0,大部分位数为1的时候就不太适合用这种方法了。

但是我们可以反向思维去运作,如果先让bit4~bit10为1 其他位为0,然后整体取反,不久可以达到我们的效果了吗?

结果如下:~(0x7f<<4)  非常简单了!

第三点:

练习题

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值