SWAP×SWAP | spin on the RITZ

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


う~む、実にスマート