a = a ^ b;
b = a ^ b;
a = a ^ b;
// 完成 a、b 值交換
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
規律:**相同為 0,不同為 1**。
a = a ^ b → a = 101 ^ 011 = 110 (6) b = a ^ b → b = 110 ^ 011 = 101 (5) a = a ^ b → a = 110 ^ 101 = 011 (3) 設 a0, b0 為初始值。
a1 = a0 ^ b0
b1 = a1 ^ b0 = (a0 ^ b0) ^ b0 = a0 ^ (b0 ^ b0) = a0 ^ 0 = a0 ✓
a2 = a1 ^ b1 = (a0 ^ b0) ^ a0 = (a0 ^ a0) ^ b0 = 0 ^ b0 = b0 ✓
利用異或**結合律**、**交換律**、**自反性 (x^x=0)**、**單位元 (x^0=x)**。
temp=a; a=b; b=temp; 效能相同且可讀性更高,**生產代碼建議用暫存變數**。