Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hoán đổi giá trị hai biến không dùng biến trung gian trong C/C++

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:

  1. a = b - a gán a = b - a (hiệu ban đầu).
  2. b -= a tức b = b - a = b - (b - a_old) = a_old.
  3. a += b tức a = 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ỉ.