ビット演算に関する演算子

広告

Python で用意されている数値型の値で利用可能な演算子の中で、ビット演算に関する演算子に関して解説します。

ビット演算に関する演算子

ビット演算に関する演算子の一覧です。ビット演算は整数でのみ利用可能です。

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 )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。