ビット演算に関する演算子
Python で用意されている数値型の値で利用可能な演算子の中で、ビット演算に関する演算子に関して解説します。
(Last modified: )
ビット演算に関する演算子
ビット演算に関する演算子の一覧です。ビット演算は整数でのみ利用可能です。
x | y x と y のビット単位 論理和 x ^ y x と y のビット単位 排他的論理和 x & y x と y のビット単位 論理積 x << n x の n ビット左シフト x >> n x の n ビット右シフト ~x x のビット反転
ではそれぞれの演算子について確認してみます。
ビットOR
ビット OR は演算子の左辺と右辺の同じ位置にあるビットを比較して、少なくともビットのどちらかが 1 の場合に 1 にします。
x | y
例として 10 と 12 のビット OR を取ってみます。
10 | 12 1010 = 10 1100 = 12 ------------ 1110 = 14
10 と 12 を 2 進数で表示し、ビット単位で比較します。少なくとも 1 つのビットが 1 になっている場合は 1 、 それ以外は 0 となります。結果として 10 | 12 は 14 となります。
ビットAND
ビット AND は演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットが 1 の場合に 1 にします。
x & y
例として 10 と 12 のビット AND を取ってみます。
10 & 12 1010 = 10 1100 = 12 ------------ 1000 = 08
10 と 12 を 2 進数で表示し、ビット単位で比較します。両方のビットが 1 になっている場合は 1 、 それ以外は 0 となります。結果として 10 & 12 は 8 となります。
ビットXOR
ビット XOR は演算子の左辺と右辺の同じ位置にあるビットを比較して、どちらか 1 つだけ 1 の場合に 1 にします。
x ^ y
例として 10 と 12 のビット XOR を取ってみます。
10 ^ 12 1010 = 10 1100 = 12 ------------ 0110 = 06
10 と 12 を 2 進数で表示し、ビット単位で比較します。どちらか片方だけのビットが 1 になっている場合は 1 、 それ以外は 0 となります。結果として 10 ^ 12 は 6 となります。
ビットNOT
ビット NOT は演算子の右辺の値のビットを反転します。ビットが 1 なら 0 、ビットが 0 なら 1 にします。
~x
例として 10 のビット NOT を取ってみます。
~10 1010 = 10 ------------ 0101 = 05
10 を 2 進数で表示し、ビットが 1 のところは 0 、ビットが 0 のところは 1 となります。結果として ~10 は 5(-11) となります。
Python においては整数の桁が無制限となっているため、反転を行う限度がありません。その為 Python におけるビット NOT は 2 の補数の計算方法を使って次のように行います。
~x = -(x + 1)
左シフト
左シフトは左辺の値を右辺の値だけ左へシフトします。
x << n
例として 11 を左へ 2 ビットシフトしてみます。
11 << 2 001011 = 11 ------------ 101100 = 44
各ビットを指定した数だけ左へシフトします。シフトしたことによって空いた右端には 0 が格納されます。結果として 11 << 2 は 44 となります。
左シフトを 1 ビット行うと値は 2 倍になり、 2 ビット行うと 4 倍となります。
右シフト
右シフトは左辺の値を右辺の値だけ右へシフトします。
x >> n
例として 11 を右へ 1 ビットシフトしてみます。
11 >> 1 1011 = 11 ------------ 0101 = 5
各ビットを指定した数だけ右へシフトします。シフトしたことによって空いた左端には 0 が格納されます。結果として 11 >> 1 は 5 となります。
右シフトを 1 ビット行うと値は 1/2 倍になり、 2 ビット行うと 1/4 倍となります。
次のサンプルを見てください。
print("10 | 12 = " + str(10 | 12)) >> 10 | 12 = 14 print("10 & 12 = " + str(10 & 12)) >> 10 & 12 = 8 print("10 ^ 12 = " + str(10 ^ 12)) >> 10 ^ 12 = 6 print("~10 = " + str(~10)) >> ~10 = -11 print("11 << 2 = " + str(11 << 2)) >> 11 << 2 = 44 print("11 >> 1 = " + str(11 >> 1)) >> 11 >> 1 = 5
それぞれのビット演算を行った結果について出力しました。
-- --
Python で用意されている数値型の値で利用可能な演算子の中で、ビット演算に関する演算子に関して解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。