読者です 読者をやめる 読者になる 読者になる

作業用変数を使わずに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

ということで見事に入れ替えられました。
まあ実際に使うかというと…使わないでしょうね。