がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

数値のスワップ

んっと。久々の小ネタです(笑
xorってビット演算使うと「二つの整数を入れ替える」処理が簡単に書けるっていう、ただそれだけの話なのですが。
イメージ的にはこんな感じです。
…言語非依存的に書きたかったのですがほとんどCと化してます(苦笑


void swap(int *i, int *j) {
// 値が等しければ処理終了
if (*i == *j) {
return ;
}

// swap開始
*i = *i xor *j;
*j = *i xor *j;
*i = *i xor *j;

// 入れ替え終了
return ;
}

さて問題です。なんでうまくいくんでしょうか(笑
答えはそのうち…書くかも書かないかも(笑


ついで。
元々は、こんな風に「マクロにしたくて」使ってました。


#define SWAP(a,b) {if(a!=b){a=a^b;b=a^b;a=a^b;}}
こーゆー「おばぁちゃんの知恵袋」的内容が…どこかにまとまっているとよいのだが。