从实用C书中有一节关于位映射和设置/测试位。这是设置位的示例。

#define SET_BIT(x,y) graphics[(x)/8][y] |= (0x80 >>((x)%8))

现在,我明白这一点,直到“|=”操作如何“设置”位为止?它比较的是SET_BIT(x)的输入和一个掩码,我想,这个掩码是从哪里来的?
0x80>>从最左边(10000000)移动位,移动的距离取决于(x)的结果%8,而之所以是%8是因为字节“x”中有8位。我理解得对吗?
下面是练习11-1的完整代码,其中包括测试位和清除位宏。
exercise 11-1

最佳答案

|=运算符按位执行就地“或”。由于您只移动了一个位,因此结果中将只修改一个位。其余值将保持不变。
xy是一个图像地址。x除以8得到一个字节地址,然后模除以8处理位地址。

10-07 12:11