1. はじめに
Pythonでは数値を扱う際にビット演算子(&、|、^、~)を使うことで、より低レベルな処理や効率的なデータ処理が可能になります。ビット演算というと難しそうに感じるかもしれませんが、基本を押さえれば実はとてもシンプルです。
本記事では、Python|ビット演算子(& | ^ ~)の基礎をやさしく解説というテーマで、初心者の方にもわかりやすいように、各演算子の動作と使い方を実例付きで丁寧に解説していきます。
この記事を読むことで、ビット演算子の基本的な理解と、簡単な応用ができるようになります。
2. Pythonにおけるビット演算子の基本と使い方
&(AND)演算子
2つのビットが両方とも1のときに1を返す演算です。
a = 5 # 0b0101
b = 3 # 0b0011
result = a & b
print(result) # 1(0b0001)
実行結果:
1
|(OR)演算子
どちらかのビットが1であれば1を返す演算です。
a = 5 # 0b0101
b = 3 # 0b0011
result = a | b
print(result) # 7(0b0111)
実行結果:
7
^(XOR)演算子
2つのビットが異なるときに1を返します。
a = 5 # 0b0101
b = 3 # 0b0011
result = a ^ b
print(result) # 6(0b0110)
実行結果:
6
~(NOT)演算子
ビットを反転(0⇔1)します。符号付き整数のため結果はマイナスになります。
a = 5 # 0b0101
result = ~a
print(result) # -6(ビット反転後の結果)
実行結果:
-6
3. ビット演算子のよくある使い方・応用例
フラグ管理に使う
ビット演算子は「状態(フラグ)」を効率よく管理するために活用されます。
# フラグの定義
READ = 0b0001 # 1
WRITE = 0b0010 # 2
EXECUTE = 0b0100 # 4
# 権限の設定(READとWRITEを許可)
permission = READ | WRITE
# 実行権限を確認
can_execute = permission & EXECUTE
print("実行可能" if can_execute else "実行不可")
実行結果:
実行不可
偶数・奇数の判定
最下位ビット(LSB)を調べることで、数値が偶数か奇数かを判定できます。
num = 42
if num & 1:
print("奇数です")
else:
print("偶数です")
実行結果:
偶数です
ビットの切り替え(トグル)
XOR(^)を使えば、特定のビットだけを反転させることができます。
flag = 0b0010 # WRITE 権限のみ
# READ 権限のON/OFFを切り替え
flag ^= 0b0001
print(bin(flag)) # 0b0011(READがONに)
実行結果:
0b11
4. ビット演算子の注意点とエラー対策
~(NOT)の結果に注意
~a は -a-1 になるというPython特有の挙動に注意してください。負の数が苦手な人は補数の考え方も軽く調べておくと良いでしょう。
a = 0
print(~a) # -1
実行結果:
-1
2進数の見方に慣れる
ビット演算は2進数で理解するのが基本です。bin()
関数を使って2進数表記に変換して確認しましょう。
a = 7
print(bin(a)) # 0b111
実行結果:
0b111
5. まとめ
今回はPythonのビット演算子(& | ^ ~)の基礎についてやさしく解説しました。AND・OR・XOR・NOTといった演算は、数値処理や状態管理に非常に便利で、特にパフォーマンス重視の場面では活躍します。
- & は「両方1なら1」
- | は「どちらかが1なら1」
- ^ は「異なるなら1」
- ~ は「ビット反転(符号も変わる)」
フラグの管理や、特定のビットだけを操作する処理など、実務でもよく登場します。まずは簡単な数値で遊んでみて、挙動を確認していくのが学習のコツです。
Pythonを使った開発で「低レベルな処理が必要な場面」や「効率化が求められる場面」では、今回学んだビット演算子が必ず役立つでしょう。