Dưới đây là ví dụ hoán đổi (swap) hai biến không dùng biến tạm:
Ví dụ
#include <stdio.h>
int main() {
int a, b;
printf("Nhap a: ");
scanf("%d", &a);
printf("Nhap b: ");
scanf("%d", &b);
a += b -= a = b - a; // Phương pháp 1: dùng phép toán số học
printf("\nSau hoan doi: %d\t%d", a, b);
return 0;
}
Kết quả
Nhap a: 23
Nhap b: 43
Sau hoan doi: 43 23
Giải thích biểu thức a += b -= a = b - a:
a = b - agána=b - a(hiệu ban đầu).b -= atứcb = b - a=b - (b - a_old)=a_old.a += btứca = a + b=(b_old - a_old) + a_old=b_old.
Kết quả: a mang giá trị cũ của b, b mang giá trị cũ của a.
Cảnh báo: Cách này chỉ dành cho mục đích học tập/đố vui. Trong code thực tế, hãy dùng biến tạm (
temp = a; a = b; b = temp;) để code rõ ràng, tránh undefined behavior do sequence points, và tránh tràn số (overflow) với số lớn.Phương pháp khác: XOR swap
a ^= b;
b ^= a;
a ^= b;
Cũng chỉ dùng cho integer, không an toàn nếu a và b trỏ cùng địa chỉ.