用法:掩码 (&)
flags = flags & MASK;
flags &= MASK;
//把MASK中0位看做非透明,1位看做透明,MASK覆盖在flags上,透明位的值为flags对应位的值,非透明位的值都为0
用法:打开位 (|)
flags = flags | MASK;
flags | = MASK;
//只有MASK为 1的位会被打开,其他位保持不变
用法:关闭位 (&~)
flags = flags&~MASK; //反转位为1的位
flags &= ~MASK; //结果是MASK对应位为1的位被关闭,其他则不变
用法:转置位 (^)
flags = flags^ MASK;
flags ^= MASK;
//只有MASK为 1的位会被转置(1变0,0变1),其他位不变
用法:查看一位的值
if((flag & MASK) == MASK)
用法:移位运算符
(<<)左位移 num << n num乘2的n次幂
(>>)右位移num>>n 如果num非负,则除以2的n次幂
位运算是指按二进制进行的运算。在程序中,常常需要处理二进制位的问题。C/C++语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。
在实际应用中,建议用unsigned整型操作数,因为带符号操作数可能因为不同机器结果不同。
下面是C/C++位操作运算符列表,其中运算符优先级为从上到下递减,但<<,>>优先级相同。
操作符 | 功能 | 用法 |
~ | 位求反 | ~expr |
<< | 左移 | expr1 << expr2 |
>> | 右移 | expr1 >> expr2 |
& | 位与 | expr1 & expr2 |
^ | 位异或 | expr1 ^ expr2 |
| | 位或 | expr1 | expr2 |