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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-24 21:21:46900ブラウズ

How Can You Swap Two Variable Values Without Using a Third Variable?

3 番目の変数を使用しない変数値の交換: インタビュー パズル

ソフトウェア開発のインタビューでは、次のような一般的な質問が提示されます。 3 番目の変数を使用せずに 2 つの変数の値を取得するには?従来、これは一時変数をプレースホルダーとして使用して実現されていました。

3 番目の変数の必要性を回避するには、xor スワップ アルゴリズムを使用できます。この手法は、排他的 OR 演算 (XOR) を利用し、両方のビットが同じ場合は 0 を返し、異なる場合は 1 を返します。

XOR スワップ アルゴリズム:

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

このアルゴリズムは、次の手順を実行することで機能します:

  1. x とy は異なるメモリ位置を参照します。
  2. *x と *y の間で XOR 演算を実行し、結果を *x に保存します。これは基本的に、*x のビットを反転して *y のビットと一致させます。
  3. *x と *y の間で別の XOR 演算を実行し、結果を *y に保存します。これにより、*y のビットが反転されて、元の *x のビットと一致します。
  4. *x と *y の間で最終的な XOR 演算を実行し、結果を *x に保存します。これにより、*x のビットが元の値に戻ります。

考慮事項:

  • x と y が異なるものを参照していることを確認することが重要です。記憶の場所。それ以外の場合、それらの XOR を実行すると、行われた変更はすべてキャンセルされます。
  • 最新のコンパイラは一時変数の必要性を最適化して排除しているため、このアルゴリズムは通常、実際には使用されません。ただし、ビット単位の演算を使用して複雑な演算を実現するという概念を示しています。

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

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