ถ้ามีโจทย์ให้สลับค่าตัวแปรสองตัว สมมุติว่า x กับ y – คิดว่าวิธีที่คนส่วนใหญ่ใช้ (ผมด้วย) คือการใช้ temporary variable “พัก” ค่าไว้ก่อนแบบนี้:
temp = x;
x = y;
y = temp;
แบบนี้เขาเรียกท่าเบสิค ลองมาดูแบบอื่นที่ไม่ต้องใช้ temp กัน
ใช้บวก ลบ คูณ หาร
x = x + y;
y = x – y;
x = x – y;
สมมุติให้ x = 9, y = 1
x = x + y;
x = 9 + 1 = 10
y = x – y;
y = 10 – 1 = 9
x = x – y;
x = 10 – 9 – 1
สุดท้าย x = 1, y = 9
วิธีนี้ให้ x เป็น temp แบบกลายๆ – คือจับสองค่ามารวมกันแล้วพักไว้ที่ x ก่อน แล้วหักค่า y จะได้ x หักค่า x (y ใหม่) ก็ได้ y
เปลี่ยนเป็นคูณ หาร ก็ได้ค่าเท่ากัน…
ใช้ XOR
XOR เป็น logical operator ตัวหนึ่ง มีความหมายว่าค่าที่เทียบสองตัวต้องไม่เหมือนกันจึงเป็น true ถ้าเหมือนเป็น false
x ^= y;
y ^= x;
x ^= y;
สมมุติให้ x = 9, y = 1
แปลงเป็นเลขฐานสอง x = 1001, y = 0001
x ^= y
x กลายเป็น 1000
y ^= x
y กลายเป็น 1001
x ^= y
x กลายเป็น 0001
แปลงกลับเป็นฐานสิบ x = 1, y = 9
สลับกันแล้วเห็นไหมเอ่ย ^-^