Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

กำหนดค่าตัวแปรจากสองค่าที่เป็นไปได้โดยไม่ใช้เงื่อนไขใน C++

ปัญหา

มีตัวแปร a ที่มีค่าเป็น x หรือ y ต้องการเปลี่ยนค่า a ให้เป็นอีกค่าหนึ่ง (ถ้า a==x ให้กลายเป็น y, ถ้า a==y ให้กลายเป็น x) ห้ามใช้เงื่อนไข if/else หรือ ternary operator

วิธีที่ 1: ใช้คณิตศาสตร์ (บวก-ลบ)

สูตร: a = x + y - a

  • ถ้า a = x: a = x + y - x = y ✓
  • ถ้า a = y: a = x + y - y = x ✓
#include <iostream>
using namespace std;

int main() {
    int x = 45, y = 5;
    int a = x; // เริ่มต้น a = x
    
    cout << "Initial a: " << a << endl;
    a = x + y - a; // สลับค่า
    cout << "After swap: " << a << endl;
    return 0;
}

ผลลัพธ์: 45 → 5

วิธีที่ 2: ใช้ Bitwise XOR

สูตร: a = x ^ y ^ a

คุณสมบัติ XOR: a ^ a = 0, a ^ 0 = a, สลับที่ได้

  • ถ้า a = x: a = x ^ y ^ x = (x ^ x) ^ y = 0 ^ y = y ✓
  • ถ้า a = y: a = x ^ y ^ y = x ^ (y ^ y) = x ^ 0 = x ✓
#include <iostream>
using namespace std;

int main() {
    int x = 56, y = 78;
    int a = x;
    
    cout << "Initial a: " << a << endl;
    a = x ^ y ^ a;
    cout << "After swap: " << a << endl;
    return 0;
}

ผลลัพธ์: 56 → 78

เปรียบเทียบ

วิธีข้อดีข้อเสีย
บวก-ลบเข้าใจง่าย, ใช้ได้กับ floatอาจเกิด overflow ด้วย int ใหญ่
XORไม่มี overflow, เร็วกว่า, ใช้ได้กับ pointerใช้ได้กับ integer เท่านั้น

โน้ต

ทั้งสองวิธีทำงานได้ก็ต่อเมื่อ a มีค่าเป็น x หรือ y เท่านั้น หาก a มีค่าอื่น ผลลัพธ์จะไม่ถูกต้อง