作業用変数を使わずに2つの値を入れ替える
今日聞いて面白かった話。
2つの値を入れ替える場合普通なら次のように書きます。
int a = 10, b = 25; int temp; temp = a; a = b; b = temp;
このように作業用の変数を用意してやれば簡単に書けます。しかし、なんとこの作業用の変数を使わなくても2つの値を入れ替えられるらしいのです。その方法がこちら。
int a = 10, b = 25; b ^= a ^= b ^= a;
…見ただけでは正直何がなんだかわかりません。記号「^=」は排他的論理和なので順を追って計算していくとこのようになります。(面倒なので1byteで)
a=00001010 b=00011001 計算1 b=b^a=00010011 計算2 a=a^b=00011001 計算3 b=b^a=00001010
ということで見事に入れ替えられました。
まあ実際に使うかというと…使わないでしょうね。