面接でよく聞かれる質問の 1 つは、3 番目の変数を一時記憶域として使用せずに 2 つの変数の値を交換する方法です。 。通常、これは次のように一時変数を使用して行われます:
temp = a; a = b; b = temp;
ただし、このアプローチには追加のメモリ割り当てと操作が必要です。別の解決策は、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:
XOR 演算: 次に、次の XOR 演算を順番に実行します:
これらの演算の結果、 *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 サイトの他の関連記事を参照してください。