XOR で変数を交換する 『xor を使うと temporary 領域なしで値を交換できる話』だと思った人、 残念でした。そういう話ではありません。 話は逆です。『そげなことは無駄だよ』という話。 本当にちゃんと交換できるの? 次の関数は pointer a と pointer b が指している先の値を交換するものです。 この関数は常に正しいかどうか、わかりますか? void swap( int *a, int *b ) { *a ^= *b; *b ^= *a; *a ^= *b; } 実は正しくありません。 a や b が指している先が本当に int とは限らない。 Cにおいてはポインターに限らず、 ほとんどあらゆるものが自動的にキャストされます。 キャストした結果が int と一致するとは限りません。 いらんところまで交換されてはたまりません。