【发布时间】:2015-09-14 00:52:29
【问题描述】:
Practical C book 中有一节是关于位图和设置/测试位的。这是设置位的示例。
#define SET_BIT(x,y) graphics[(x)/8][y] |= (0x80 >>((x)%8))
现在,我明白这一点,直到“|=”该操作如何“设置”位?它将 SET_BIT(x) 的输入与掩码进行比较,我想,这个掩码是从哪里来的?
0x80>>从最左边(10000000)开始移位,多远取决于(x)%8的结果,之所以是“%8”是因为字节“x”中有8位.我理解正确吗?
这是练习 11-1 的完整代码,其中包括 TEST_BIT 和 CLEAR_BIT 宏。 exercise 11-1
【问题讨论】:
-
不要在有符号整数上使用它!它可能不会产生预期的结果。一个字节是否有 8 位取决于实现。你应该先检查
CHAR_BIT。