SWAP×SWAP
C言語の教科書で、ポインタの説明になるとほぼ必ず出てくるswap関数。
普通は交換する2つともう1つ退避用の変数を使って交換するのですが、ちょっと変わったやり方があります。
それは、排他的論理和(XOR)を使うのだ!
#include <stdio.h> int main(void) { int a = 9; int b = 5; printf("a = %d , b = %d\n", a, b); a = a ^ b; b = a ^ b; a = a ^ b; printf("a = %d , b = %d\n", a, b); return 0; }
これはこれで、結構有名なプログラムだったりするみたい。でもこないだまで知らなかった(苦笑)
どこかのサイトでみたんだけど、どこで見たかは覚えてません。
こういうことがちょちょっと出来るのは面白い。
4bit符号無し2進数であらわす。ちょこっと解説
最初:
a = 1001
b = 0101
a = a ^ b後:
a = 1100
b = 0101
b = a ^ b後:
a = 1100
b = 1001
a = a ^ b後:
a = 0101
b = 1001
う~む、実にスマート