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

Hoán đổi hai biến trong một dòng code C/C++

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:

  1. a ^= b → a = a^b
  2. b ^= a → b = b^(a^b) = a
  3. a ^= 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ỉ.