掩码
按位与运算符常用于掩码(mask)。所谓掩码指的是一些设置为开(1)或关(0)的位组合。
1、打开位(设置位)
打开一个值中的特定位,同时保持其他位不变。
flags | MASK
例:flags 是 00001111,MASK 是 10110110.下面的表达式:
flags | MASK
即:(00001111) | (10110110)
其结果为:(10111111)
MASK 中为 1 的位,flags 与其对应的位也为 1。MASK 中为 0 的位, flags 与其对应的位不变。
2、关闭位(清空位)
关闭指定的位,同时保持其他位不变。
flags & ~ ( MASK)
例:flags 是 00001111, MASK 是10110110.下面的表达式:
flags & ~(MASK)
即:(00001111) & ~(10110110)
其结果为:(00001001)
MASK 中为 1 的位在结果中都被设置为(清空)为 0。flags 中与 MASK 为 0 的位相应的为在结果中都未改变。
3、切换位
打开已关闭的位,关闭已打开的位
flags ^ MASK
例:flags 是 00001111, MASK 是10110110.下面的表达式:
flags ^ MASK
即:(00001111) ^ (10110110)
其结果为:(10111001)
flags 中与 MASK 为 1 的位相对应的位都被切换,MASK 为 0 的位相对应的位不变。
4、检查位
检查某位的值。(覆盖 flags 中其他位的值,只用要检查的位和 MASK 比较)
((flags & MASK)== MASK)//按位运算符的优先级小于等号,所以必须加上括号
5、移位运算符
number << n | number 乘以 2 的 n次幂 |
number >> n | 如果 number 为非负,则用 number 除以 2 的 n 次幂 |