對於任一位向量a,有a ^ a = 0。考慮下面的程序:
1 void inplace_swap(int *x, int *y) 2 { 3 *y = *x ^ *y; 4 *x = *x ^ *y; 5 *y = *x ^ *y; 6 }
假設x和y指向的位置分別是a和b。完成下表:
步驟 *x *y 初始 a b 第一步 a a^b 第二步 a^(a^b) a^b 第三步 a^(a^b) a^(a^b)^(a^b)由於異或運算滿足交換率和結合率,且a ^ 0 = 0, a ^ = ~a。所以有
步驟 *x *y 初始 a b 第一步 a a^b 第二步 b a^b 第三步 b a