目次
1. 基本的なビット演算
0 1 0
0 1 1
-----
&:有0就是0 0 1 0
|:有1就是1 0 1 1
^:相同为0,相异为1 /无进位相加 0 0 1
2. 数値 n を指定して、そのバイナリ表現の x 番目のビットが 0 か 1 かを判断します。
n: 0 1 1 0 1 0 1 0 0 1
结论:(n >> x) & 1
3. 数値 n の 2 進表現の x 番目のビットを 1 に変更します。
0 1 1 0 1 0 1 0 0 1
| 0 0 0 0 0 1 0 0 0 0
-> 0 1 1 0 1 1 1 0 0 1
结论:n |= (1 << x)
4. 数値 n の 2 進表現の x 番目のビットを 0 に変更します。
0 1 1 0 1 0 1 0 0 1
& 1 1 1 1 0 1 1 1 1 1
-> 0 1 1 0 0 1 1 0 0 1
结论:n &= (~(1 << x))
5. ビットマップの考え方
本質: ハッシュテーブル
6. 数値 (n) の 2 進数表現の右端の 1 を抽出します。
0 1 1 0 1 0 1 0 0 0
~ 1 0 0 1 0 1 0 1 1 1
+1 1 0 0 1 0 1 1 0 0 0
& 0 1 1 0 1 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
结论:n & -n
-n: 本質は、右端の 1 と左のすべての領域をその反対に変更することです。
7. 数値 (n) の 2 進数表現の右端の 1 を削除します。
0 1 1 0 1 0 1 0 0
& 0 1 1 0 1 0 0 1 1
0 1 1 0 1 0 0 0 0
结论:n & (n - 1)
(n - 1): 右端の 1 と右のすべての領域 (1 を含む) を反対に変更します。
8. ビット演算の優先順位
括弧を追加できる場合は追加してください。これが最も間違いの可能性が低くなります。
9.XOR(^演算の動作法則)
1.a ^ 0 = a
2. a ^ a = 0
3. a ^ b ^ c = a ^ (b ^ c)