Algorithm:Xor交換兩個數值變數
這是我今年春節看Java Puzzlers時才知道的技巧,有很大的delay,交換數值變數利用Xor運算就可以完成,就方法就。
這個方法的優點是不消耗額外記憶體空間,只需要a和b兩個變數即可完成。
程式碼如下:
延伸連結
b^=a; a^=b; b^=a;這是利用xor的特性,將A xor B 或是 B xor A都會得到一個相同的值 C。若將這個值跟 A 作xor運算,就會得到 B;而若是將其跟 B 作xor運算,則會得到 A。
A xor B = C在密碼學中,資料與key的混合也常常用xor運算達到還原的效果。
C xor B = A
C xor A = B
這個方法的優點是不消耗額外記憶體空間,只需要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; } |
延伸連結
留言