运用OR运算打开位:打开一个值中特定的位,同时保持其他位不变。flags = flags | MASK
关闭位:不影响其它位,同时能够将特定的位关闭。flags = flags & ~MASK或者flags &= ~MASK
转置位:转置一个位表示如果该位打开,则关闭该位;如果该位关闭,则打开该位。如果使用异或将一个值与掩码组合,那么该值中对应掩码位为1的位被转置,对应掩码位为0的位不改变。比如:
flag = flag ^ MASK;
查看一位的值:
if (( flag & MASK) == MASK)
puts (“wow!”);
143. 左移<<:将其左侧操作数的值的每 位向左移动,移动的位数由其右侧操作数指定。空出的位用0填充,并且丢弃移出左侧操作数末端的位,相当于乘以2的次幂。比如:(10001010) << 2,结果为(00101000)。
右移>>:将其左侧操作数的值的每位向右移动,移动的位数由其右侧操作数指定,丢弃移出左侧操作数右端的位,如果数值非负,则相当于除以2的次幂。对于unsigned类型,使用0填充左端空出的位。对于有符号类型,结果依赖于机器,空出的位可能用0填充,或者使用符号(最左端的)位的副本填充:
(10001010) >> 2,结果可能为(00100010),也可能为(11100010)
对于无符号值:
(10001010) >> 2,结果为(00100010)