ホームページ >Java >&#&チュートリアル >XOR 演算子を理解する: コンピューティングにおける強力なツール

XOR 演算子を理解する: コンピューティングにおける強力なツール

DDD
DDDオリジナル
2025-01-06 20:16:41872ブラウズ

Understanding the XOR Operator: A Powerful Tool in Computing

XOR 演算子 (Exclusive OR の略) は、コンピューター サイエンス、数学、デジタル ロジックの基本概念です。多くのプログラミング言語では記号 ^、数学表記では ⊕ で表される XOR は、暗号化、データ構造、アルゴリズムなどのさまざまなアプリケーションで広く使用されている論理演算です。この投稿では、XOR 演算子の仕組み、そのプロパティ、実際の応用について説明します。


XORとは何ですか?

XOR 演算子は 2 つのバイナリ入力を比較し、入力が 異なる、および の場合は true (1) を返します。 false (0) 入力が同じ。それは簡単な真理値表に要約できます:

Input A Input B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

XOR 演算子は、一方の入力が true の場合にのみ true を返し、両方の入力は true ではないため、"排他的 OR" と呼ばれることがよくあります。


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)
  5. キャンセル:

    • ある値と別の値を XOR 演算し、同じ値を再度 XOR 演算すると、元の値が復元されます。
      • (A ⊕ B) ⊕ B = A

XOR の応用

1. ユニークな要素を見つける

プログラミングにおける XOR の最も一般的な用途の 1 つは、他のすべての要素が 2 回出現する配列内で一意の要素を見つけることです。

例:

public int findUnique(int[] nums) {
    int result = 0;
    for (int num : nums) {
        result ^= num; // XOR all elements
    }
    return result; // The unique number remains
}

これは、 x ⊕ x = 0 のように、重複する数値が相殺されるため機能します。


2. 一時変数を使用せずに 2 つの数値を交換する

XOR を使用すると、追加の変数を必要とせずに 2 つの数値を交換できます。

例:

int a = 5, b = 10;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a: " + a + ", b: " + b); // Output: a: 10, b: 5

これがどのように機能するかを段階的に説明します:

  1. a = a ^ b → a と b の XOR を a に格納します。
  2. b = a ^ b → 再度 XOR 演算して a を b に復元します。
  3. a = a ^ b → 再度 XOR 演算して b を a に戻します。

3. ビット操作と暗号化

XOR 演算子は、平文とキーを組み合わせて暗号文を生成するために暗号化で頻繁に使用されます。 XOR は可逆的 (A ⊕ B) ⊕ B = A であるため、安全な暗号化と復号化が保証されます。

例:

// Simple XOR Encryption
public String xorEncrypt(String message, char key) {
    char[] encrypted = new char[message.length()];
    for (int i = 0; i < message.length(); i++) {
        encrypted[i] = (char) (message.charAt(i) ^ key);
    }
    return new String(encrypted);
}

4. 間違い探し

LeetCode のこの問題。
XOR を使用して問題を解決できます。

s = "abcd" と t = "abcde" のような 2 つの文字列があり、その差分を返すと想像してください。

public char findTheDifference(String s, String t) {
        char result = 0;
        for (int i = 0; i < s.length(); i++) {
            result ^= s.charAt(i);
        }
        for (int i = 0; i < t.length(); i++) {
            result ^= t.charAt(i);
        }
        return result;
    }

XOR を使用する理由

XOR は効率的であり、必要な計算リソースは最小限です。ビット レベルで動作するため、暗号化やエラー検出などのタスクを他の多くの方法よりも高速に実行できます。そのユニークな特性により、コンピューティングにおけるさまざまな問題を解決するための多用途ツールとなります。


まとめ

XOR 演算子は、コンピューティングと数学における強力で多用途のツールです。その特性と用途を理解することで、それを活用して効率的なアルゴリズムを作成し、複雑な問題を解決し、低レベルの操作の理解をさらに高めることができます。アルゴリズムを最適化する場合でも、暗号化を探索する場合でも、XOR はプログラミング ツールボックスに不可欠な部分です。


?参照

  • Java の XOR 演算子

?私に話して

  • リンクトイン
  • Github
  • ポートフォリオ

以上がXOR 演算子を理解する: コンピューティングにおける強力なツールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。