Python Notes - XOR演算、OR演算、演算

操作する 特徴 アプリケーションシナリオ
XOR 2 つのオペランドが異なる場合、結果は 1 になり、同じ場合、結果は 0 になります。 暗号化アルゴリズム、チェックサム計算、配列内で奇数回出現する要素の検索など。
または 2 つのオペランドのいずれかが 1 の場合、結果は 1 になります。 論理判断、権限制御、スイッチ状態判断など
そして 両方のオペランドが 1 の場合、結果は 1 になります。 マスク演算、ビット演算、論理判定など

例証します:

  1. 排他的論理和演算 (XOR): 2 つのオペランドが異なる場合、結果は 1 になり、2 つのオペランドが同じ場合、結果は 0 になります。XOR 演算には、再帰性 (A XOR A = 0) と交換法則 (A XOR B = B XOR A) の特性があります。XOR 演算は、暗号化アルゴリズム、チェックサム計算、配列内で奇数回出現する要素の検索などのシナリオで広く使用されています。

  2. 論理和演算 (OR): 2 つのオペランドのいずれかが 1 の場合、結果は 1 になり、両方のオペランドが 0 の場合、結果は 0 になります。あるいは論理判断、権限制御、スイッチ状態判断などのシナリオで操作がよく使われます。

  3. AND 演算 (AND): 両方のオペランドが 1 の場合、結果は 1 になり、2 つのオペランドの一方が 0 の場合、結果は 0 になります。AND 演算は、マスク演算、ビット演算、論理判定などでよく使用されます。

これらの論理演算はコンピュータサイエンスや電子工学の分野で広く使用されており、論理判断、データの暗号化、データ伝送の検証、ビット演算などのタスクを処理することができます。プログラミングや回路設計では、これらの論理演算は、複雑なロジックと機能を構築するための基礎となります。

XOR演算

XOR演算(XOR、排他的論理和)は、2つの2進数の各ビットに適用される2項演算であり、その演算規則は次のとおりです。

  1. 2 つのビットが同じ (両方 0 または両方 1) の場合、結果は 0 になります。
  2. 2 つのビットが異なる場合 (1 つは 0、もう 1 つは 1)、結果は 1 になります。

XOR 演算によく使用される記号は、通常、プログラミング言語では「」で表されます

XOR 演算には、いくつかの重要なプロパティがあります。

  1. 任意の数値と 0 の XOR 演算の結果は、数値そのもの (a^0 = a) になります。
  2. 任意の数値自身との XOR 演算の結果は 0、つまり a ^ a = 0 になります。
  3. XOR 演算は交換法則、つまり a ^ b = b ^ a を満たします。
  4. XOR 演算は結合法則、つまり (a ^ b) ^ c = a ^ (b ^ c) を満たします。

これらの特性により、XOR 演算はコンピューターで広く使用されており、次のシナリオでよく使用されます。

  1. 追加の一時変数を必要とせずに、2 つの変数の値を交換します。
  2. 余分なスペースを使用せずに配列内の要素を並べ替えます。
  3. 2 つの数値が等しいかどうかをすばやく判断する a^b = 0 の性質により、2 つの数値が等しいかどうかを判断するために使用できます。

プログラミングでは、XOR 演算は通常、ビット演算や低レベルのコンピューター演算の問題を解決するために使用され、アルゴリズムの問​​題を解決するための一般的な手法の 1 つでもあります。

OR演算、AND演算

OR 演算(OR、Bitwise OR) とAND 演算(AND、Bitwise AND) は、2 つの 2 進数の各ビットに適用される 2 つの 2 項演算であり、その演算規則は次のとおりです。

  1. または演算 (|): 2 つのバイナリ ビットの 1 つが 1 である限り、結果は 1 になり、それ以外の場合、結果は 0 になります。

    • 例: 0b1101 | 0b1010 = 0b1111
  2. AND 演算 (&): 結果が 1 になる前に、両方の 2 進ビットが 1 でなければなりません。それ以外の場合、結果は 0 になります。

    • 例: 0b1101 & 0b1010 = 0b1000

OR 演算と AND 演算はコンピュータで広く使用されており、次のシナリオでよく使用されます。

  1. ビット マスク: AND および OR 演算を通じて、数値の特定のビットをマスクして、特定のビット情報を抽出または設定できます。
  2. 条件判定: AND 演算と OR 演算を使用して、特定の条件に基づいて特定の演算を実行するか、特定のフラグを設定するかを判断するなど、条件判定の効果を実現できます。
  3. ビット演算: AND 演算と OR 演算はビット演算の基本演算であり、シフトや否定など、2 進数でさまざまなビットレベルの演算を実行するために使用できます。

プログラミングでは、ビット演算の問題を解決したり、2 進数のビットを制御および操作したりするために、OR 演算と AND 演算がよく使用されます。これらはコンピューターの基礎となる操作の基礎であり、一部のアルゴリズムやデータ処理で一般的に使用されるツールでもあります。

XORの応用

たとえば、配列 [2, 3, 4, 2, 4, 5, 3] の場合、次のことができます。

  1. 変数の結果を 0 に初期化します。
  2. 配列内の各数値 num に対して result ^= num 演算を実行します。つまり、result と num に対して XOR 演算を実行し、結果を result に代入します。
  3. result の最終値は、1 回だけ出現する数値です。

Python コードの例:

def find_single_number(nums):
    result = 0
    for num in nums:
        result ^= num
    return result

# 示例
nums = [2, 3, 4, 2, 4, 5, 3]
print(find_single_number(nums))  # 输出:5

XOR 演算を使用すると、追加のデータ構造や複雑な走査方法を使用せずに、配列内に 1 回だけ出現する数値を効率的に見つけることができます。

および操作、または操作の応用

以下に、OR 演算と AND 演算を使用したアルゴリズムの 2 つの例を示します。

  1. ビット マスキング:
    ビット マスキングは、AND 演算と OR 演算を使用して数値の特定のビットをマスクする手法です。特定のビットを 1 または 0 に設定することで、必要な情報をマスクまたは抽出できます。

例: ビット マスクを使用して、32 ビット整数の下位 16 ビットと上位 16 ビットを抽出します。

def extract_low_and_high_bits(num):
    low_bits = num & 0xFFFF  # 0xFFFF表示16个二进制位全为1,其余位全为0
    high_bits = (num >> 16) & 0xFFFF
    return low_bits, high_bits

# 示例
number = 0b11001100110011001100110011001100  # 一个32位整数
low, high = extract_low_and_high_bits(number)
print("低16位:", bin(low))
print("高16位:", bin(high))
  1. 奇数と偶数を決定する:
    2 進数の場合、最後のビットは 1 で奇数を示し、0 で偶数を示します。したがって、AND 演算を使用して、整数が奇数であるか偶数であるかを判断できます。

例: AND 演算を使用して、整数が奇数か偶数かを判断します。

def is_even_or_odd(num):
    if num & 1 == 0:
        return "偶数"
    else:
        return "奇数"

# 示例
number = 10
print(number, "是", is_even_or_odd(number))

これらの例は、アルゴリズムにおける OR および AND 演算の適用を示しています。これらは、ビットレベルの演算と判断を実行するのに役立ち、一部の 2 進数の問題を解決するための一般的なテクニックです。

おすすめ

転載: blog.csdn.net/qq_40140808/article/details/131884214