Select Language

AI Technology Community

2.3、Pythonビット演算子の使用方法

ビット演算はデータのバイナリビットに対して操作を行うもので、非常に低レベルな操作ですが、効率が高いです。

Pythonは一般的なビット演算をサポートしており、ビットごとの論理積、論理和、排他的論理和、反転、およびシフトが含まれます。このセクションでは論理積、論理和、排他的論理和、および反転操作についてのみ説明し、《Pythonのシフト演算》でシフト演算について引き続き説明します。

1. ビットごとの論理積(&)

ビットごとに順番に論理積操作を行います。この操作には2つのオペランドが必要で、返される値の各ビットの値は、2つのオペランドの対応するビットを論理積操作した結果です。この操作はオペランド自体を変更せず、つまりこの操作を行った後も、2つのオペランドの値は変化しません。

論理積操作の真理値表は表1の通りです。

表1:論理積操作の真理値表
ABA&B
111
100
010
000


以下に論理積操作の例を示します:

>>> 1 & 2    # 2つのオペランドはそれぞれ1と2
0            # 上位ビットはそれぞれ0と1なので、上位ビットの結果は0
             # 下位ビットはそれぞれ1と0なので、下位ビットの結果も0
             # 最終的な結果は0
>>> 6 & 12   # 6 = 0110B、12 = 1100B
4            # 高位から低位へ、結果は順に0100B = 4

2. ビットごとの論理和(|)

ビットごとに順番に論理和操作を行います。この操作には2つのオペランドが必要で、返される値の各ビットの値は、2つのオペランドの対応するビットを論理和操作した結果です。この操作はオペランド自体を変更せず、つまりこの操作を行った後も、2つのオペランドの値は変化しません。

論理和操作の真理値表は表2の通りです。

表2:論理和操作の真理値表
ABA|B
111
101
011
000


以下に論理和操作の例を示します:

>>> 1 | 2    # 2つのオペランドはそれぞれ1と2    
3            # 上位ビットはそれぞれ0と1なので、上位ビットの結果は1
             # 下位ビットはそれぞれ1と0なので、下位ビットの結果も1
             # 最終的な結果は11B = 3
>>> 6 | 12   # 6 = 0110B、12 = 1100B
14           # 高位から低位へ、結果は順に1110B = 14

3. ビットごとの排他的論理和(^)

ビットごとに順番に排他的論理和操作を行います。この操作にも2つのオペランドが必要で、返される値の各ビットの値は、2つのオペランドの対応するビットを排他的論理和操作した結果です。この操作はオペランド自体を変更せず、つまりこの操作を行った後も、2つのオペランドの値は変化しません。

排他的論理和操作の真理値表は表3の通りです。

表3:排他的論理和操作の真理値表
ABA^B
110
101
011
000


以下に排他的論理和操作の例を示します:

>>> 1 ^ 2    # 2つのオペランドはそれぞれ1と2    
3            # 上位ビットはそれぞれ0と1なので、上位ビットの結果は1
             # 下位ビットはそれぞれ1と0なので、下位ビットの結果も1
             # 最終的な結果は11B = 3
>>> 6 ^ 12   # 6 = 0110B、12 = 1100B
10           # 高位から低位へ、結果は順に1010B = 10

4. ビットごとの反転(~)

ビットごとに順番に反転操作を行います。この操作には1つのオペランドのみが必要で、返される値の各ビットの値は、オペランドの対応するビットを反転操作した結果です。この操作はオペランド自体を変更せず、つまりこの操作を行った後も、元のオペランドの値は変化しません。

反転操作の真理値表は表4の通りです。

表4:反転操作の真理値表
A~A
10
01


以下に反転操作の例を示します:

>>> ~100 + 1        # ある数の負の数を補数で表す方法は
-100                # ビットごとに反転してから+1
                    # したがって、結果は100の負の数である-100
>>> ~(-100) + 1     # 上と同じで、-100の負の数を求める
100                 # したがって、結果は100


post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。