![893c6fce03814e11b9fa3fe0906c1368.png](https://img-blog.csdnimg.cn/img_convert/893c6fce03814e11b9fa3fe0906c1368.png)
1. 读取某些位
- 读一个位,比如读无符号为整数
x
的第pos
位,先将x
右移pos
位,使要读取的位移到最低位,再通过&1
将其取出。
python (x >> pos) & 1
比如读取数字3
第一位,(3 >> 1)&1
- 读取某几个连续位,比如读无符号整数
x
第pos
位开始的cnt
位,首先将x
右移pos
位,再通过& mask
来取出最后的cnt
位,mask = (1 << cnt) - 1
(x >> pos) & ((1 << cnt) - 1)
比如读取数字17
第0
为开始的4
位,(17 >> 0) & ((1 << 4)-1)
读取某个或者某些二进制位关键是与运算,通过将原数和一个mask
进行与运算,保留一些位的目的。
2. 改某些位
- 将某些位置为1
python x | (1 << pos)
- 将某些位置为0,由于python的
python x & (~(1 << pos))
- 取反某些位
x ^ (l << pos)