一時変数を使わないでふたつの変数の値を交換するためには XOR 演算を使います。
まず、普通にふたつの変数の値を交換するコードを書くと次のようになります。
int a = 123; int b = 456; int temp = a; a = b; b = temp; std::cout <<a <<std::endl: // 456 std::cout <<b <<std::endl: // 123
これは誰でも頷けますよね。片方の変数の値を保持するために temp という一時的な変数を使っています。しかし、このコードは次のように書くこともできるのです。
int a = 123; int b = 456; a = a ^ b; b = a ^ b; a = a ^ b; std::cout <<a <<std::endl; std::cout <<b <<std::endl;
これは XOR 交換アルゴリズムと言ってプログラマの間では非常に有名な手法です(有名であって支持されているわけではありません)。原理は環論の話になってしまうの割愛させていただきます。
本当はこういう解説を難なくやってのけたいんですけどね。実力の限界です。
Contributions