[Python]ビット演算子(&, |, ^, ~, <<, >>)

ビット演算子は、プログラミングで一般的に使用されるもので、整数のビット(二進数の桁)に直接作用します。Pythonでもこのビット演算子が使用できます。以下に、各ビット演算子の働きとその使用例を示します。

ビット演算子とは:

  • &(ビット AND): この演算子は、両方のビットが1の場合にのみ1を返します。それ以外の場合は0を返します。
  • |(ビット OR): この演算子は、少なくとも一方のビットが1の場合に1を返します。
  • ^(ビット XOR): この演算子は、両方のビットが異なる場合に1を返します。
  • ~(ビット NOT): この演算子は、ビットを反転させます。つまり、0のビットは1に、1のビットは0になります。
  • <<(左シフト): この演算子は、ビット列を左にシフトします。つまり、各ビットを指定したビット数だけ左に移動させます。
  • >>(右シフト): この演算子は、ビット列を右にシフトします。つまり、各ビットを指定したビット数だけ右に移動させます。

それぞれの演算子について具体的な例を見てみましょう。ビット表現に焦点を当てているので、各整数を2進数で表示します。

# 以下の2つの数についてビット演算子を使ってみましょう
# 10の2進数表現: 1010
#  7の2進数表現: 0111

# ビットAND (&)
print(10 & 7)  # 出力: 2
# 解説: 二進数表現で1010 & 0111 = 0010 (これは10進数で2)

# ビットOR (|)
print(10 | 7)  # 出力: 15
# 解説: 二進数表現で1010 | 0111 = 1111 (これは10進数で15)

# ビットXOR (^)
print(10 ^ 7)  # 出力: 13
# 解説: 二進数表現で1010 ^ 0111 = 1101 (これは10進数で13)

# ビットNOT (~)
print(~10)  # 出力: -11
# 解説: PythonではビットNOT演算は、数値のビットを反転させてから1を加えたものとなります。なので ~1010 = -1011 (これは10進数で-11)

# 左シフト (<<)


print(10 << 2)  # 出力: 40
# 解説: 二進数表現で 1010 (10) を左に2ビットシフトすると 101000 (これは10進数で40)

# 右シフト (>>)
print(10 >> 2)  # 出力: 2
# 解説: 二進数表現で 1010 (10) を右に2ビットシフトすると 0010 (これは10進数で2)

これらのビット演算子は、性能の最適化や、低レベルのプログラミング、データの暗号化やデコードなど、多くのプログラミングの領域で利用されます。しかし、日々のプログラミングではそれほど頻繁には出てこないかもしれません。それでも、これらの基本を理解しておくと、より広範な問題解決が可能となります。