第一点:
常用的位操作符:位与、位或、位取反、位异或、左移位、右移位;
位与是& 逻辑与是&& 位与时两个操作数是按照二进制位批次对应位相与的,逻辑与是两个操作数作为整体来相与的;(举例: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) 非常简单了!
第三点:
练习题