Python でのビットマスキングの概要

Zeeshan Afridi 2023年6月21日
Python でのビットマスキングの概要

このチュートリアルでは、Python でのビット マスキングについて説明し、ANDORNOT などのビット単位の演算子を使用してビット マスキングを実行する方法を示します。

Python でのビットマスクの概要

ビットマスクは、ほぼすべてのプログラミング言語の一般的な概念です。 基本的に、それはビット単位の操作を支援し、値のビットを深く理解し、操作するのに役立つ単なる変数です。たとえば、整数値としましょう。

また、値をより小さく効率的なバージョンに圧縮するのにも役立ち、メモリ使用量とビット操作を削減します。 コンピュータでは、すべてのデータまたは情報が下位レベルのビットに格納されます。

このビットは、0 (False) または 1 (True) の 2つの状態のみになり、特定の組み合わせには特定の意味があります。

Python のビットマスクの概念を理解するための例を見てみましょう。

# convert 8 into binary format --> 1000
bindata = format(8, "b")
print(bindata)

出力:

1000

上記の例では、10 進数の整数 81000 に相当するバイナリ形式に変換しました。 これで、より深い部分で 8 を操作して、そのすべてを操作できます。

ここで、ビットマスキングの概念が登場します。 しかし、最初に、バイナリ ビットを操作する方法の例を見てみましょう。

コード例:

bin_a = int(format(8, "b"))  # 1000
bin_b = int(format(1, "b"))  # 0001 or 1

# 1000 (8)
# 0001 (1) OR (|) Bitwise Operator
# -----
# 1001 (9)

print(f"bin_ a = {bin_a}")
print(f"bin_ b =  {bin_b}")
print(f"The OR (SUM) of bin_a and bin_b = {(bin_a | bin_b)}")

出力:

bin_ a = 1000
bin_ b =  1
The OR (SUM) of bin_a and bin_b = 1001

上記のコード フェンスでは、バイナリ値をビット単位で加算するために使用される、| として表されるビット演算子 OR を使用しました。

Python のビット演算子

ビット演算子は、任意の整数型 shortbytelongcharint などのビットごとの操作を実行します。それぞれに特定のユース ケースがあるさまざまなビット演算子があります。

  1. ビット OR |
  2. ビット AND &
  3. ビット単位の XOR ^
  4. ビット単位の補数 ~

ビットごとの OR |

OR 演算子は、| で表されるビット単位の演算子であり、2つ以上の値をビットごとに操作し、少なくとも 1つの値が true または false の場合は true を返します。

以下は、2つの値に対する OR (|) の基本構造です。

| A | B | A | B|
| ——— | ——— | ——— |
| 1 (真)| 1 (真)| 1 (真)|
| 0 (偽)| 0 (偽)| 0 (偽)|
| 1 (真)| 0 (偽)| 1 (真)|
| 0 (偽)| 1 (真)| 1 (真)|

コード例:

# Bitwise operator OR (|)

a = int(format(5, "b"))  # 101
b = int(format(4, "b"))  # 100

# 101 (5)
# 100 (4)  OR (|) Bitwise Operator
# ------
# 101 (5)

print(f"a = {a}\nb = {b}")
print("a & b = ", (a | b))  # 101

出力:

a = 101
b = 100
a & b =  101

ビット演算 AND &

AND 演算子は & で表されるビット単位の演算子で、2つまたは複数の値をビットごとに計算し、両方の値が true の場合は true を返します。 それ以外の場合、false

これは、2つの値に対する AND (&) の基本構造です。

A B A & B
1 (真) 1 (真) 1 (真)
0 (偽) 0 (偽) 0 (偽)
1 (真) 0 (偽) 1 (偽)
0 (偽) 1 (真) 0 (偽)

コード例:

# Bitwise operator AND (&)

a = int(format(5, "b"))  # 101
b = int(format(4, "b"))  # 100

# 101 (5)
# 100 (4)  AND (&) Bitwise Operator
# -----
# 100 (4)

print(f"a = {a}\nb = {b}")
print("a & b = ", (a & b))  # 100

出力:

a = 101
b = 100
a & b =  100

ビット単位の XOR ^

これは ^ で表される二項演算子であり、指定された 2つの値が true または false のいずれかである場合、false を返します。 それ以外の場合は、true を返します。

XOR 演算子の基本構造は次のとおりです。

A B A ^ B
1 (真) 1 (真) 0 (偽)
0 (偽) 0 (偽) 0 (偽)
1 (真) 0 (偽) 1 (真)
0 (偽) 1 (真) 1 (真)

コード例:

# Bitwise operator XOR (^)

a = int(format(7, "b"))  # 101
b = int(format(4, "b"))  # 100

# 111 (7)
# 100 (4)  XOR (^) Bitwise Operator
# ------
# 011 (3)

print(f"a = {a}\nb = {b}")
print("a ^ b = ", (a ^ b))  # 011 or 11

出力:

a = 111
b = 100
a ^ b =  11

ビット単位の補数 ~

ビット単位の補数 (~) は、NOT 演算子として知られる単項演算子です。 NOT 演算子は、値のビット パターンを反転します。

NOT 演算子の基本構造は次のとおりです。

A ~A
1 (真) 0 (偽)
0 (偽) 1 (真)

NOT (~) の概念を学ぶために、以下の例を見てみましょう。

# Bitwise operator NOT (~)

a = int(format(0, "b"))

print(f"a = {a}")
print(f"The Complement of a = {~a}")

出力:

a = 0
The Complement of a = -1
著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn