-
一个二进制位可记录某种对象的开关状态
-
位反运算符"~"
~ 0101 0101
= 1010 1010
unsigned char s=0x55; s=~s
在实际应用中,位反运算可以将操作数中所有状态位同时进行反制。
例如,一个无符号字符型变量s,用s来记录八盏电灯的开关状态,对变量s进行位反运算,就可以将八盏电灯中亮着的电灯关闭,不亮的灯开启。C++原程序中没有办法书写二进制,通常我们将二进制转化为十六进制
- 位与运算符"&"
0011 0011
& 0000 1111
= 0000 0011
位与运算符是双目运算符,参与运算的两个数都为1则结果为1,否则结果为0
unsigned char s; s & 0x2 0000 0010
bbbb bbbb 操作数s,b表示0或1
& 0000 0010 检测倒数第二位状态的掩码
运算结果:保留倒数第二位,其他位变成0
= 0000 00b0 如果该结果等于0,则倒数第二位的状态为0
如果该结果不等于0,则倒数第二位的状态为1
- 位或运算符 “|”
0011 0011
| 0000 1111
= 0011 1111
位或运算符也是一个双目运算符,参与运算的两个数字,只要有一个为1,则结果为1.
unsigned char s; s | 0x2
bbbb bbbb 操作数s,b表示0或1
| 0000 0010 将倒数第二位状态置1的掩码
= bbbb bb1b 运算结果:将倒数第二位置成1,其他位不变
- 异或运算符"^"
0011 0011
^ 0000 1111
= 0011 1100
如果两位相同,则结果为0;两位不同,则结果为1
- 左移运算符"<<"
unsigned char s =0x33; s<<2
0011 0011 八位操作数
<< 2 左移两位
= (00)1100 1100 左移结果:高2位移除,底两位补0
- 右移运算符">>"
unsigned char s=0x33; s>>2
00011 0011 8位无符号数
>> 2 右移2位
= 0000 1100(11) 右移结果:底2位移除,高两位补0
只有整形:char、short、int、long可以位运算