ホームページ >バックエンド開発 >C++ >3 番目の変数を使用せずに変数の値を交換するにはどうすればよいですか?

3 番目の変数を使用せずに変数の値を交換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-12 18:36:10570ブラウズ

How to Swap Variable Values Without Using a Third Variable?

3 番目の変数を使用せずに変数の値を交換する

面接でよく聞かれる質問の 1 つは、3 番目の変数を一時記憶域として使用せずに 2 つの変数の値を交換する方法です。 。通常、これは次のように一時変数を使用して行われます:

temp = a;
a = b;
b = temp;

ただし、このアプローチには追加のメモリ割り当てと操作が必要です。別の解決策は、XOR スワップ アルゴリズムを使用することです。

XOR スワップ アルゴリズム

XOR スワップ アルゴリズムは、排他的 OR (XOR) 演算を利用して機能します。 XOR 演算子には、XOR a は常に 0 を返し、XOR b は b が 0 の場合は a を返し、a が 0 の場合は b を返すという特性があります。

この特性を使用すると、2 つの変数の値を交換できます。 x と y は次のようになります:

// XOR swap function
void xorSwap(int* x, int* y) {
    if (x != y) { //ensure that memory locations are different
       *x ^= *y;
       *y ^= *x;
       *x ^= *y;
    }
}

その理由works:

  1. メモリ位置チェック: まず、x と y のメモリ位置が異なるかどうかを確認します。同じメモリ位置を共有するとスワップが機能しないため、これは不可欠です。
  2. XOR 演算: 次に、次の XOR 演算を順番に実行します:

    • *x ^= *y: これにより、*x が *x XOR *y に設定されます。
    • *y ^= *x: これは、*y を *y XOR *x に設定します。*x XOR *x は 0 であるため、*x になります。
    • *x ^= *y: 最後に、*x を * に設定します。 x XOR *y。*x XOR *x が 0 であるため、*y になります。

これらの演算の結果、 *x には *y の元の値が含まれ、*y には *x の元の値が含まれます。

コード例

ここでは、XOR スワップ アルゴリズムを使用する方法の例を示します。 C:

#include <stdio.h>

int main() {
    int a = 10;
    int b = 15;

    printf("Before swap: a = %d, b = %d\n", a, b);

    xorSwap(&a, &b);

    printf("After swap: a = %d, b = %d\n", a, b);

    return 0;
}

出力:

Before swap: a = 10, b = 15
After swap: a = 15, b = 10

考慮事項

XOR スワップ アルゴリズムは効率的で 3 番目の変数の必要性を排除しますが、常に有効であるとは限りません。最も最適な解決策。多くの場合、コンパイラは、一時変数を使用したより伝統的な方法を使用してコードを最適化します。したがって、XOR スワップ アルゴリズムを使用する前に、プログラムの特定の要件を考慮することが重要です。

以上が3 番目の変数を使用せずに変数の値を交換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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