Dưới đây là hai cách swap một dòng trong C:
Ví dụ
#include <stdio.h>
int main() {
int a = 28, b = 8;
// Cách 1: Phép toán số học
a += b -= a = b - a;
printf("Sau swap: %d\t%d\n", a, b);
// Cách 2: XOR swap
a ^= b, b ^= a, a ^= b;
printf("Sau swap lai: %d\t%d\n", a, b);
return 0;
}
Kết quả
Sau swap: 8 28
Sau swap lai: 28 8
Giải thích cách 1: a += b -= a = b - a thực hiện theo thứ tự: gán a = b - a, rồi b -= a, rồi a += b – kết quả hoán đổi.
Giải thích cách 2: XOR swap dùng tính chất x ^ x = 0, x ^ 0 = x:
a ^= b→ a = a^bb ^= a→ b = b^(a^b) = aa ^= b→ a = (a^b)^a = b
Cảnh báo: Cách này chỉ để đố vui/học tập. Code production hãy dùng biến tạm hoặc
std::swap (C++) để rõ ràng, an toàn, tránh UB (sequence points), và tránh lỗi khi a/b trùng địa chỉ.