[解決済み] XOR変数のスワップはどのように行われるのですか?
2023-08-27 02:31:53
質問
2つの変数のXORスワップが、temp変数なしでどのように動作するのか、誰か説明してください。
void xorSwap (int *x, int *y)
{
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
私はそれが何をするのか理解していますが、誰かそれがどのように動作するかのロジックを介して私を歩くことができますか?
どのように解決するのですか?
代入をすることで、どのように動作するかがわかります。
x1 = x0 xor y0
y2 = x1 xor y0
x2 = x1 xor y2
代入する。
x1 = x0 xor y0
y2 = (x0 xor y0) xor y0
x2 = (x0 xor y0) xor ((x0 xor y0) xor y0)
xorは完全な連想・可換であるため。
y2 = x0 xor (y0 xor y0)
x2 = (x0 xor x0) xor (y0 xor y0) xor y0
以降
x xor x == 0
は任意のxに対して
y2 = x0 xor 0
x2 = 0 xor 0 xor y0
また
x xor 0 == x
は任意のxに対して
y2 = x0
x2 = y0
そして、入れ替えが完了しました。
関連
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] セッションとは何ですか?どのように機能するのですか?
-
[解決済み】ビットシフト(bit-shift)演算子とは、どのようなもので、どのように機能するのですか?
-
[解決済み】GOTOはまだ有害と考えられている?[クローズド]
-
[解決済み] なぜ、ハッシュを組み合わせるのにXORがデフォルトなのですか?
-
[解決済み】10行以下の簡単なコードでできる最もクールなことは何ですか?初心者を鼓舞するのに役立つ [終了しました]
-
[解決済み] 例外やエラーコードの規約 [終了しました]。
-
[解決済み] リンクリストはどのような場合に有効か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] O(N log N)の複雑さ - 線形に似ている?
-
[解決済み] グリーンフィールド・アプリケーションとブラウンフィールド・アプリケーションとは?
-
[解決済み] 点から線分までの最短距離
-
[解決済み] さまざまなアプローチやコンセプトを理解するために学ぶべき重要な言語とは?[クローズド]
-
[解決済み] ブーリアン・チェックにxor演算子を使用するのは良いことですか?[クローズド]
-
[解決済み] 例外処理とリターンコードのどちらが好きか、またその理由は?
-
[解決済み] Lambdaとは?
-
[解決済み] プログラミングコンテストの出場者は、なぜC++やJavaを使うのか?[終了しました]
-
[解決済み] 抽象度はどれくらいがいいのか?
-
[解決済み] ベンダリングとは何ですか?