Algorithm:Xor交換兩個數值變數

這是我今年春節看Java Puzzlers時才知道的技巧,有很大的delay,交換數值變數利用Xor運算就可以完成,就方法就。
b^=a; a^=b; b^=a;
這是利用xor的特性,將A xor B 或是 B xor A都會得到一個相同的值 C。若將這個值跟 A 作xor運算,就會得到 B;而若是將其跟 B 作xor運算,則會得到 A。
A xor B = C
C xor B = A
C xor A = B
在密碼學中,資料與key的混合也常常用xor運算達到還原的效果。

這個方法的優點是不消耗額外記憶體空間,只需要a和b兩個變數即可完成。

程式碼如下:
#include <stdio.h>
#include <stdlib.h>

int main() {
    int x = 10;
    int y = 20;
    printf ("origin: x=%d, y=%d\n", x, y);
    x = x ^ y;
    y = x ^ y;
    x = x ^ y;
    printf ("swap:   x=%d, y=%d\n", x, y);
    return 0;
}
https://en.wikipedia.org/wiki/XOR_swap_algorithm


延伸連結

留言