a = a ^ b;
b = a ^ b; // b = (a^b)^b = a
a = a ^ b; // a = (a^b)^a = b
原理:異或運算滿足 x^x=0、x^0=x、交換律/結合律。
優點:無臨時變數、**絕不溢出**、位級操作極快。
缺點:a、b 為同一變數時會歸零(需檢查 &a != &b)。
a = a + b;
b = a - b; // b = (a+b)-b = a
a = a - b; // a = (a+b)-a = b
缺點:a+b 可能溢出(有號整數溢出屬未定義行為),**生產代碼禁用**。
int tmp = a; a = b; b = tmp;
優點:語意清晰、適用所有類型(含浮點、結構體)、編譯器優化極好(寄存器分配、移除冗餘存取)。
-O2/-O3)會將三者**優化為相同機器碼**(通常是寄存器重命名或 XCHG 指令)。// C++ 樣板
template<typename T> void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
// C11 _Generic 或巨集模擬泛型
#define SWAP(a, b) do { typeof(a) tmp = (a); (a) = (b); (b) = tmp; } while(0)
XOR 交換是位運算教科書級範例,展示了異或性質之美。**但工程實踐中:可讀性 > 微優化,臨時變數法才是正解。** 編譯器比程式設計師更擅長生成最優交換指令。