Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのビット演算子とは?種類と使い方を実例付きでわかりやすく解説

Pythonのビット演算子とは

ビット演算子は、数値を2進数のビット列として扱い、ビット単位で計算を行う演算子です。Pythonでは主に6種類のビット演算子が用意されており、フラグ管理やマスク処理など低レベルなデータ操作で活躍します。

ここでは、次の2つの変数を例に各演算子の動作を見ていきます。

a = 60 → 0011 1100
b = 13 → 0000 1101

これらの変数に対して基本のビット演算を行うと、結果は以下のようになります。

a & b = 0000 1100
a | b = 0011 1101
a ^ b = 0011 0001
~a   = 1100 0011

ビット演算子の一覧

番号演算子と説明使用例
1&(AND:論理積)
両方のオペランドで同じ位置に1が存在する場合のみ、そのビットを結果にコピーします。
(a & b) = 12(0000 1100)
2|(OR:論理和)
どちらか一方のオペランドでもビットが立っていれば、そのビットを結果にコピーします。
(a | b) = 61(0011 1101)
3^(XOR:排他的論理和)
どちらか一方だけビットが立っている場合に、そのビットを結果にコピーします。
(a ^ b) = 49(0011 0001)
4~(NOT:1の補数)
単項演算子で、すべてのビットを反転させます。
(~a) = -61(符号付き整数のため、2の補数表現では 1100 0011 となります)
5<<(左シフト)
左側のオペランドの値を、右側のオペランドで指定したビット数だけ左へずらします。
(a << 2) = 240(1111 0000)
6>>(右シフト)
左側のオペランドの値を、右側のオペランドで指定したビット数だけ右へずらします。
(a >> 2) = 15(0000 1111)

なお、**=(べき乗代入)や //=(切り捨て除算代入)はビット演算子ではなく複合代入演算子の一種です。c **= ac = c ** a と同等になるように、演算結果を左辺の変数へ代入する働きを持ちます。

サンプルコード

以下は、各ビット演算子の動作を確認できるPython 3のサンプルプログラムです。

#!/usr/bin/python3

a = 60   # 60 = 0011 1100
b = 13   # 13 = 0000 1101
c = 0

c = a & b    # 12 = 0000 1100
print("Line 1 - Value of c is", c)

c = a | b    # 61 = 0011 1101
print("Line 2 - Value of c is", c)

c = a ^ b    # 49 = 0011 0001
print("Line 3 - Value of c is", c)

c = ~a       # -61 = 1100 0011
print("Line 4 - Value of c is", c)

c = a << 2   # 240 = 1111 0000
print("Line 5 - Value of c is", c)

c = a >> 2   # 15 = 0000 1111
print("Line 6 - Value of c is", c)

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

Line 1 - Value of c is 12
Line 2 - Value of c is 61
Line 3 - Value of c is 49
Line 4 - Value of c is -61
Line 5 - Value of c is 240
Line 6 - Value of c is 15

まとめ

ビット演算子は、一見とっつきにくく感じられますが、2進数の仕組みさえ理解すれば直感的に扱えます。特に <<>> のシフト演算は、2のべき乗との掛け算・割り算としても利用できるため、パフォーマンスが求められる場面で役立ちます。ぜひ実際にコードを書いて、挙動を確かめてみてください。

  1. Pythonにおける比較演算子の連鎖(チェーン)の使い方を徹底解説

    プログラミングをしていると、1つの条件式の中で複数の条件を同時にチェックしたい場面がよくあります。例えば「x < y < z」のような数学的な記法を使いたい場合や、「x < y かつ x < z」といった形で条件を組み合わせたい場合などです。 他の多くの言語と同様に、Pythonにも基本的な比較演算子が用意されています。具体的には、<、<=、>、>=、==、!=、is、is not、in、not in の各演算子です。 これらの比較演算子はすべて同じ優先順位を持っており、その優先順位は算術演算子・ビット演算子・シフト演算子よりも低く設定されて

  2. Pythonのビット演算子の種類と使い方をわかりやすく解説

    ビット演算子(Bitwise Operators)とは、数値を2進数のビット単位で操作するための演算子です。Pythonでは、以下の6種類のビット演算子が定義されています。 Pythonで使えるビット演算子の一覧 &(ビット単位AND):両方のビットが1の場合のみ1を返します |(ビット単位OR):どちらか一方でも1であれば1を返します ^(ビット単位XOR・排他的論理和):片方のビットだけが1の場合に1を返します ~(ビット反転・補数):ビットが0なら1へ、1なら0へ反転します <<(左シフト):ビットを左へシフトし、右側の空いたビットは0で埋められます >>