12-用法_打开位(设置位)
15.3.3 用法:打开位(设置位)
有时,需要打开一个值中的特定位,同时保持其他位不变。例如,一台 IBM PC 通过向端口发送值来控制硬件。例如,为了打开内置扬声器,必须打开 1 号位,同时保持其他位不变。这种情况可以使用按位或运算符( | )。
以上一节的 flags 和 MASK (只有 1 号位为 1 )为例。下面的语句:
flags = flags | MASK;
把 flags 的 1 号位设置为 1 ,且其他位不变。因为使用 | 运算符,任何位与 0 组合,结果都为本身;任何位与 1 组合,结果都为 1 。
例如,假设 flags 是 00001111 , MASK 是 10110110 。下面的表达式:
flags | MASK
即是:
(00001111) | (10110110) // 表达式
其结果为:
(10111111) // 结果值
MASK 中为 1 的位, flags 与其对应的位也为 1 。 MASK 中为 0 的位, flags 与其对应的位不变。
用 |= 运算符可以简化上面的代码,如下所示:
flags |= MASK;
同样,这种方法根据 MASK 中为 1 的位,把 flags 中对应的位设置为 1 ,其他位不变。