ผู้สนับสนุน

วันเสาร์ที่ ๔ กรกฎาคม พ.ศ. ๒๕๕๒

สลับค่าตัวแปรด้วย xor

ลืมไปนานจนมีคนมาถามเนี่ยแหละสลับค่าตัวแปรอย่างไรดีที่สุด แล้วก็ไปเห็นตัวอย่างนึงเค้าเขียนไว้ว่า
php code
$a = $a ^ $b;
$b = $a ^ $b;
$a = $a ^ $b;

เอ๋เค้าทำอะไรกันหว่า?
หาก็ไม่ค่อยเจอเพราะว่าไอ้เครื่องหมาย ^ caret เนี่ยมันหาใน google เจอซะที่ไหน ก็เลยไปถามนู๋เนยรู้เรื่องเลย ว่าไอ้ ^  มันหมายความว่า xor หรือ exclusive or โดยจะมีตารางค่าความจริงเป็นดังนี้

abxor
110
101
011
000

มีประโยชน์อย่างยิ่งในการสลับค่าตัวแปรโดยที่ไม่จำเป็นต้องประกาศตัวแปรเพิ่มเติม ไม่ต้องจอง buffer ให้มากมาย
หลักการ (a xor b) xor b จะเท่ากับ a
ตัวอย่างการทำงาน
a = 14  >> 1110
b = 5    >> 1010

1) a = a xor b2) b = a xor b3) a = a xor b
a111001000101
b101010101111
result0100 --->  a1110 ---> b0101 ---> a

a กับ b สลับค่ากันแล้ว! wow จริงๆ แล้วมันเป็นเรื่องที่ไม่น่าลืมนะเนี่ย

ไม่มีความคิดเห็น:

แสดงความคิดเห็น