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