Pythonのビット演算子

投稿日: 2024年4月9日

Pythonにおけるビット演算子は、整数をビットレベルで操作する際に使用される演算子です。

通常では使うことはありません。

ビット演算は、データの圧縮、暗号化、低レベルのプログラミングなど、特定のアプリケーションで非常に有用です。以下に主なビット演算子を紹介します。

ビット演算子の種類

&(ビットAND): 両方のオペランドの対応するビットが1であれば、結果のビットも1になります。

x = 6 & 3  # 6 = 110(2), 3 = 011(2), 結果は 010(2) = 2

|(ビットOR): 両方のオペランドの対応するビットのいずれかが1であれば、結果のビットも1になります。

x = 6 | 3  # 6 = 110(2), 3 = 011(2), 結果は 111(2) = 7

^(ビットXOR): 両方のオペランドの対応するビットが異なれば、結果のビットが1になります。

x = 6 ^ 3  # 6 = 110(2), 3 = 011(2), 結果は 101(2) = 5

~(ビットNOT): オペランドのビットを反転します(1は0に、0は1になります)。Pythonでは、~xは-x-1と等価です。

x = ~6  # 6 = 110(2), 結果は ...11111111111111111111111111111001(2) = -7

<<(左シフト): 左オペランドのビットを右オペランドの数だけ左にシフトします。空いたビットは0で埋められます。

x = 6 << 2  # 6 = 110(2), 結果は 11000(2) = 24

>>(右シフト): 左オペランドのビットを右オペランドの数だけ右にシフトします。符号ビットは保持され、空いたビットは符号ビットで埋められます(Pythonでは符号ビットが0の場合)。

x = 6 >> 2  # 6 = 110(2), 結果は 1(2) = 1

ビット演算は、数値を直接的にビットレベルで操作することを可能にします。
これにより、特定のアルゴリズムや処理において、高速かつメモリ効率的な操作が可能になります。ただし、ビット演算は直感的ではないため、その使用にはビットレベルでのデータの理解が必要です。

記事