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 延伸連結 (原創) 如何交換兩個變數,而不動用第三個變數? (C/C++) (C#) - 真 OO无双 - 博客园 達可鴨的池塘: XOR奇文共賞─變數直接互換、無線網路編碼