プロが教えるわが家の防犯対策術!

C言語勉強中のものです!サンプルプログラムを見ていたら「x^=y^=x^=y;」というプログラムを目にして、残念なことに頭の中がはてなになりました。有識者の方、解説をお願い致します!(急ぎで!!!!)

A 回答 (4件)

XOR交換アルゴリズムって面白い


https://qiita.com/Riliumph/items/9f3719b2db39cf1 …

度肝を抜かれるSWAPマクロ (C言語)
http://tricky-code.net/nicecode/code01.php

xとyの値を入れ替えてる。

int main() {
int x=1, y=2;

printf("x=%d\n", x); // x=1
printf("y=%d\n", y); // y=2

x^=y^=x^=y;

printf("x=%d\n", x); // x=2
printf("y=%d\n", y); // y=1

return 0;
}
    • good
    • 1

これ, 多分忘れてしまった方がいいんじゃないかなぁ.... 厳密な確認はしてないけど, なんとなく undefined behav

ior っぽいんだ.
    • good
    • 1

x^=(y^=(x^=y));


なら、わかりますか?

え、わからない?
それでは、
 x^=y;
はわかりますよね。

ならば、
 y^=(x^=y);
もわかるでしょう。

No2さんの心配されているように、
 3回目の ^= の演算時に使われる x の値は、
 1回目の ^= の演算の結果の x の値なのか、演算前の x の値なのか、
処理系により異なる気がしますので、遊びで使うのは良いですが、まともなプログラムでは使われない方がよいと思います。
    • good
    • 1

いちおう補足しとくと, 例えば


(x^=y, y^=x, x^=y);
なら正しいんだよね....

「正しい」分だけ
x^=y^=x^=y;
よりはましだけど「お説教コース」であることは変わらんな.
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!