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

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

Mary-Kate Olsen
リリース: 2024-12-09 13:42:15
オリジナル
466 人が閲覧しました

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

3 番目のバリアントを使用しない変数の交換

はじめに:

2 つの変数の値の交換は、一般的なプログラミング タスクです。通常、3 番目の変数は、交換を容易にするための一時的なプレースホルダーとして使用されます。ただし、シナリオによっては、メモリの最適化などの理由から、余分な変数の作成を避けることが望ましい場合があります。

問題ステートメント:

2 つの変数の値を交換する3 番目の変数を使用しない a と b。

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

XOR スワップ アルゴリズムは、XOR 演算子 (^) を利用して 2 つの変数の内容を交換します。アルゴリズムは次のように定義されます:

void xorSwap(int* x, int* y) {
    if (x != y) { //ensure that memory locations are different
       *x ^= *y;
       *y ^= *x;
       *x ^= *y;
    }
}
ログイン後にコピー

実装の詳細:

  • if ステートメントは、x と y のメモリ位置が異なるかどうかをチェックして、それらが異なるメモリ位置にないことを確認します。同じ値を指します。
  • XOR 演算子が 3 回適用され、値が連続して交換されます。各 XOR 演算は、対応する変数のビットを反転し、その内容を効果的に交換します。

例:

a = 10 および b = を使用してアルゴリズムを示してみましょう。 15:

// Before swap
a = 10 (00001010)
b = 15 (00001111)

// XOR step 1
a = a ^ b = 00001010 ^ 00001111 = 00000101

// XOR step 2
b = b ^ a = 00001111 ^ 00000101 = 00001010

// XOR step 3
a = a ^ b = 00000101 ^ 00001010 = 00001111

// After swap
a = 15
b = 10
ログイン後にコピー

考慮事項:

XOR スワップ アルゴリズムは効率的ですが、通常、一般的なプログラミング シナリオでの使用は推奨されません。最新のコンパイラーは、一時変数の使用を最適化し、ほとんどの場合、値の交換をより効率的に行うことができます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート