用一个 位的二进制数 表示集合 的一个子集
的二进制第 位是 1 当且仅当

例如,用二进制数 1001 表示集合

的子集有 个,它们和整数 一一对应。

位运算

<<:左移
例:5 << 2 结果是 20。110 11000

>>:右移
例:18 >> 2 结果是 8。10010 100

&:按位与
例:18 & 6 结果是 2。

  10010
& 00110
--------
  00010

|:按位或
例:18 | 6 结果是 22。

  10010
| 00110
--------
  10110

^:按位异或
例:18 ^ 6 结果是 20。

  10010
^ 00110
--------
  10100

位运算符的优先级

a * ba / ba % b
a + ba - b
a << ba >> b
a < ba <= ba > ba >= b
a == ba != b
a & b
a ^ b
a | b
a && b
a || b

位运算的应用

x & 1 结果是 x 的二进制第 0 位上的数字,也表示 x 的奇偶性。

(x >> i) & 1 结果是 x 的二进制第 i 位上的数字。

x ^ (1 << i) 结果是把 x 的二进制第 i 位上的数字反转所得的数。

x | (1 << i) 结果是把 x 的二进制第 i 位上的数字置为 1 所得的数。