Python 速習チュートリアル

Python ビット演算子

1. ビット演算子の概要

ビット演算子(Bitwise Operators)は、数値(バイナリ)をビット単位で比較するために使用されます。

演算子名称説明
&AND両方のビットが 1 の場合に、各ビットを 1 に設定します。x & y
|OR2つのビットのうち少なくとも一方が 1 の場合に、各ビットを 1 に設定します。x | y
^XOR2つのビットのうち一方のみが 1 の場合に、各ビットを 1 に設定します。x ^ y
~NOTすべてのビットを反転させます。~x
<<ゼロ埋め左シフト右側からゼロを押し込み、左側のビットを溢れさせることで左へシフトします。x << 2
>>符号あり右シフト左側から左端のビットのコピーを押し込み、右側のビットを溢れさせることで右へシフトします。x >> 2

2. AND 演算子 (&)

& 演算子は、両方のビットが 1 の場合にのみ、結果のビットを 1 に設定します。

例:
6 のバイナリは 0110、3 のバイナリは 0011 です。この 2 つを & で比較すると、両方が 1 であるビットは右から 2 番目のみとなり、結果は 0010(すなわち 2)になります。

print(6 & 3)

"""
6 = 0000000000000110
3 = 0000000000000011
--------------------
2 = 0000000000000010
"""

3. OR 演算子 (|)

| 演算子は、2つのビットのうち少なくとも一方が 1 であれば、結果のビットを 1 に設定します。

例:
6(0110)と 3(0011)を | で比較すると、1、2、3 番目のビットが 1 となり、結果は 0111(すなわち 7)になります。

print(6 | 3)

"""
6 = 0000000000000110
3 = 0000000000000011
--------------------
7 = 0000000000000111
"""

4. XOR 演算子 (^)

^ 演算子は、2つのビットのうち「一方のみ」が 1 の場合に、結果のビットを 1 に設定します。両方が 1 または両方が 0 の場合は 0 になります。

例:
6(0110)と 3(0011)を ^ で比較すると、1 番目と 3 番目のビットが 1 となり、結果は 0101(すなわち 5)になります。

print(6 ^ 3)

"""
6 = 0000000000000110
3 = 0000000000000011
--------------------
5 = 0000000000000101
"""

5. NOT 演算子 (~)

~ 演算子はビットを反転させます(1 は 0 に、0 は 1 になります)。

Python における ~x の結果は、数学的には -(x + 1) と等しくなります。

例:
数値 3 のビットを反転させる例です。

print(~3)

"""
 3 = 0000000000000011
--反転--
-4 = 1111111111111100
"""

6. ゼロ埋め左シフト (<<)

<< 演算子は、指定したビット数分だけ左にシフトします。右側からは 0 が補充され、左側から溢れたビットは破棄されます。

例:
3(0011)を 2 ビット左にシフトすると、1100(すなわち 12)になります。

print(3 << 2)

"""
 3 = 0000000000000011
--2ビット左シフト--
12 = 0000000000001100
"""

7. 符号あり右シフト (>>)

>> 演算子は、指定したビット数分だけ右にシフトします。左側からは左端のビット(符号ビット)と同じ値が補充され、右側から溢れたビットは破棄されます。

例:
8(1000)を 2 ビット右にシフトすると、0010(すなわち 2)になります。

print(8 >> 2)

"""
 8 = 0000000000001000
--2ビット右シフト--
 2 = 0000000000000010
"""