13-用法_关闭位(清空位)
15.3.4 用法:关闭位(清空位)
和打开特定的位类似,有时也需要在不影响其他位的情况下关闭指定的位。假设要关闭变量 flags 中的1号位。同样, MASK 只有1号位为 1 (即,打开)。可以这样做:
flags = flags & ~MASK;
由于 MASK 除1号位为 1 以外,其他位全为 0 ,所以~ MASK 除1号位为 0 以外,其他位全为 1 。使用 & ,任何位与 1 组合都得本身,所以这条语句保持除1号位以外的其他各位不变。另外,使用 & ,任何位与 0 组合都得 0 。所以无论 1 号位的初始值是什么,都将其设置为 0 。
例如,假设 flags 是 00001111 , MASK 是 10110110 。下面的表达式:
flags & ~MASK
即是:
(00001111) & ~(10110110) // 表达式
其结果为:
(00001001) // 结果值
MASK 中为 1 的位在结果中都被设置(清空)为 0 。 flags 中与 MASK 为 0 的位相应的位在结果中都未改变。
可以使用下面的简化形式:
flags &= ~MASK;