Bit Mask方法解析:请求解读bitMask(int i)函数的位运算逻辑
位掩码函数
bitMask(int i) 工作原理拆解 这个函数的作用是:根据总位索引i(0-23),生成对应member数组元素中目标位的掩码(即仅目标位为1、其余位为0的字节值)。下面一步步拆解表达式(byte)(1 << (7 - (i & 7))):
1. i & 7:计算当前字节内的相对位偏移
7的二进制是00000111,和整数i做按位与运算,结果等价于i % 8(求i除以8的余数),取值范围是0-7。
- 这个余数代表:
i对应的总位,落在所属member元素(member[0]/1/2)里的相对位索引(从0开始)。 - 比如
i=9,9&7=1,说明它在member[1]的第1个相对位上;i=23,23&7=7,说明它在member[2]的第7个相对位上。
2. 7 - (i & 7):反转相对位索引
因为member的每个元素是8位字节,这里的总位编号和字节内部的位编号是反向的:
- 总位0对应member[0]的最高位(第7位,二进制最左侧)
- 总位7对应member[0]的最低位(第0位,二进制最右侧)
通过7 - 余数,把相对位索引反转,得到字节内部的实际位位置(从最高位到最低位对应0到7的总位偏移)。 - 比如余数0→7-0=7(对应字节第7位),余数7→7-7=0(对应字节第0位)。
3. 1 << 计算结果:生成位掩码
把数字1(二进制00000001)左移7 - (i&7)位,就会把1移动到目标位的位置,得到对应的掩码:
- 左移7位:
10000000(十进制128),对应member元素的最高位 - 左移0位:
00000001(十进制1),对应member元素的最低位 - 左移3位:
00001000(十进制8),对应member元素的第3位
举几个实际例子
- 当
i=0:0&7=0→7-0=7→1<<7=128,掩码是10000000,对应member[0]的最高位(总位0) - 当
i=7:7&7=7→7-7=0→1<<0=1,掩码是00000001,对应member[0]的最低位(总位7) - 当
i=10:10&7=2→7-2=5→1<<5=32,掩码是00100000,对应member[1]的第5位(总位10)
内容的提问来源于stack exchange,提问作者BreenDeen
相关产品推荐
相关产品推荐

