C++语言程序设计

| 表3-8 位运算符如何运算

实例 | 10进制值 | 二进制值

x

011

0 | 0 | 0 | 0 | 1 | 0 | 0 | 1

y

027

0 | 0 | 0 | 1 | 0 | 1 | 1 | 1

~x

366

1 | 1 | 1 | 1 | 0 | 1 | 1 | 0

x & y

001

0 | 0 | 0 | 0 | 0 | 0 | 0 | 1

x | y

037

0 | 0 | 0 | 1 | 1 | 1 | 1 | 1

x ^ y

036

0 | 0 | 0 | 1 | 1 | 1 | 1 | 0

x << 2

044

0 | 0 | 1 | 0 | 0 | 1 | 0 | 0

x >> 2

002

0 | 0 | 0 | 0 | 0 | 0 | 1 | 0

位运算符要求操作数是整型数，并按二进制位的顺序来处理它们。位运算符除取反运算符'~'为单目运算符外，其余的都是双目运算符，这可以从上面的表格中的表达式例子中看出来。具体说来：
'&'为逐位与运算符，用于把两个操作数对应的二进制位进行逻辑与操作，逻辑与的操作上一节已经作了介绍，这里不再赘述。所以0x011&0x001其实就是二进制数0000000000010001B 和二进制数0000000000000001B每一位都进行逻辑与运算，其结果必然是0000000000000001B 即0x001。
'|'为逐位或运算符，用于把两个操作数对应的二进制位进行逻辑或操作。所以，根据逻辑或的运算规则，表达式0x011|0x001的结果必然是0x011。有兴趣的同学可以自己把相应的二进制位进行逐个的逻辑或运算，看看结果是不是0x011.。
'^'为逐位异或运算符，用于把两个操作数对应的二进制位进行异或操作。因此，0x011^0x001的结果是0000000000010000B，即0x010。
'<<'为逐位左移运算符，用于将左操作数的每一个二进制位左移右操作数位，空缺的位设置为0或1。对于无符号整数或有符号整数，但符号位为0（即为正数），空缺位设置为0；如果符号位为1（即为负数），空缺位是设置为0，还是设置为1，要取决于所用的计算机系统。因此，0x011<<2 结果是0x044。
'>>'为逐位右移运算符，将左操作数的每一个二进制位右移右操作数位，空缺的位设置为0或1，和逐位左移运算符一致。因此，0x011>>2的结果是0x004
具体的运算的进行还可以参考表3-7位运算符如何运算。