当前位置:嗨网首页>书籍在线阅读

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

例如,假设 flags00001111MASK10110110 。下面的表达式:

flags & ~MASK

即是:

(00001111) & ~(10110110)    // 表达式

其结果为:

(00001001)                // 结果值

MASK 中为 1 的位在结果中都被设置(清空)为 0flags 中与 MASK0 的位相应的位在结果中都未改变。

可以使用下面的简化形式:

flags &= ~MASK;