void swap(int *p1, int *p2) {
int t = *p1; *p1 = *p2; *p2 = t;
}
a ^= b; b ^= a; a ^= b;
原理:x ^ x = 0,x ^ 0 = x。注意:若 a、b 指向同一地址,會將值清零!
a = a + b; b = a - b; a = a - b;
浮點測試:
float a = 3.123456f, b = 1234567.0f; // 交換後 a ≈ 1234567.001544(精度丟失) // 改用 double 則正確
原因:float 有效位數約 7 位,大數吃小數導致低位截斷。
a = a * b; b = a / b; a = a / b;
缺點:溢出風險、除零錯誤、浮點精度損失。
double 減少精度損失,或用 memcpy 逐字節交換(極端優化)。