【アルゴリズム】よくあるビット演算のまとめ

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)

おすすめ

転載: blog.csdn.net/weixin_61341342/article/details/132801904