一、位运算符号

1. &

按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
其真值表如下 :

输入A 输入B 输出Y
0 0 0
0 1 0
1 0 0
1 1 1

2. |

按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
其真值表如下 :

输入A 输入B 输出Y
0 0 0
0 1 1
1 0 1
1 1 1

3. ^

按位异或
若参加运算的两个二进制位值相同则为0,否则为1
其真值表如下 :

输入A 输入B 输出Y
0 0 0
0 1 1
1 0 1
1 1 0

4. ~

取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1
其真值表如下 :

输入A 输出Y
0 1
1 0

举例如下:

1000101 1000101 1000101 1000101
& 0101100 | 0101110 ~ ^ 0101110
= 0000100 = 1101111 = 0111010 = 1101011

5.位移运算

左移:<<

用来将一个数的各二进制位全部左移n位,低位以0补充,高位越界后舍弃。
1左移n位: 1 << n=2^n (这里指2的n次方)
n左移1位: n << 1=2*n

右移:>>

将一个数的各二进制位右移N位,移到右端的低位被舍弃,高位以符号位填充
n左移1位 : n >> 1=|n/2.0|
算术右移等于除以2向下取整,(-3)>> 1 = -2 ,3 >> 1 = 1
值得一提的是,“整数/2”在c++中实现为“除以2向零取整”,(-3)/ 2 = -1,3 / 2 = 1

二、常用操作

位运算 - 图1

三、运算符优先级

位运算 - 图2