&=~(3<<24) 和 |=(1<<24) 的作用是修改二进制 0和1 的位。
1. 介绍
假设有一个 32bit 的CPU,CPU 在一个时钟周期可以处理32bit 的数据。
32bit 就代表有 32个 0 或 1 ,编号是 0 至 31 ,这是人类书写方法,CPU 里是 31 至 0 。
在通常写法中,为了方便,将每4位(bit) 分为 一组,如下:
1000 0000 0010 0001 0000 0001 0000 0010 ------------------------------------------ 31 0
2. 与运算
看下面的这个句子,想要看语句的优先级。
&=~(3<<24)
1. 先算 (3<<24), 3的二进制 左移 24位。
移动前: 0000 0000 0000 0000 0000 0000 0000 0011 移动后: 0000 0011 0000 0000 0000 0000 0000 0000
2. 再算 ~ (按位取反)
移动后: 0000 0011 0000 0000 0000 0000 0000 0000 上面的值按位取反: 1111 1100 1111 1111 1111 1111 1111 1111 十六进制显示: 0xFCFFFFFF
3. &= (=号就是变量赋值的=号意思)
& 是将上面按位取反后,和某个值按位与(假设& 左边是某个寄存器)
某寄存器值:1001 0000 1000 0001 1100 1011 1100 0000 取反后的值: 1111 1100 1111 1111 1111 1111 1111 1111 ------------------------------------------------------- 按位与运算:1001 1100 1000 0001 1100 1011 1100 0000
总结:&=~(3<<24) 作用就是只修改 第24位的值,其他位的值不变。
3. 或运算
|=(1<<24) 的过程和上面 与运算 过程一样,就不重复说明了。
参考:
https://www.bilibili.com/video/BV1ba411g78y 时间:09分01秒
标签:24,0000,0001,取反,1111,意思,按位,1100 From: https://www.cnblogs.com/wutou/p/17090400.html