Wednesday, October 05, 2005

XOR เอาไปทำอะไรได้บ้าง

bitwise XOR operator หรือ ^ เป็น operator ที่ไม่ค่อยได้เห็นที่ใช้เท่าไหร่นัก

1st tip วันนี้จะเป็นการใช้ XOR เพื่อทำการ swap ค่าของตัวแปร

ก่อนอื่นก็ขออธิบายว่า XOR มันทำงานอย่างไร XOR operands ทั้ง 2 ตัวถ้าค่าเหมือนกันจะ return false ไม่เหมือนกัน return true

ตัวอย่างเช่น
true xor true ==> false
true xor false ==> true
etc.

หรือถ้าเขียนเป็น 1 กะ 0 ก็จะได้

1 xor 1 ==> 0
1 xor 0 ==> 1

xor มีคุณสมบัติอีกอย่างนึงคือ ค่าใดก็แล้วแต่ ถ้านำไป xor กะค่าอื่น 2 ครั้ง ค่าที่ได้ก็จะกลับคืนไปเป็นค่าเดิม
เช่น
1 xor 0 ==> 1 นำไป xor 0 อีกที ก็จะได้ 1
1 xor 1 ==> 0 นำไป xor 1 อีกทีี ก็จะได้ 1

น่าแปลกนะครับ และนี่ก็เป็นคุณสมบัติที่ทำให้เราสามารถเอาไปใช้เพื่อทำการ swap ค่า

ถ้าให้

a xor b xor b ==> a
b xor a xor a ==> b

มาถึงการ swap ละครับ โดยทั่วไปการ swap ค่าก็จะทำได้โดย

temp = a;
a = b;
b = temp;

เราก็จะได้ค่า a สลับกะ b แต่ในที่นี้เราต้องทำการเพิ่มตัวแปรเข้าไปอีก 1 ตัว

สมมติเรามีตัวแปรแค่ 2 ตัวละครับ เราก็สามารถทำได้ดังนี้ครับ

a = a ^ b; // a' = a ^ b
b = a ^ b; // b' = a' ^ b ซึ่งก็คือ b' = a ^ b ^ b ซึ่งก็เป็น a นั่นเอง
a = a ^ b; // a'' = a' ^ b' ซึ่งก็คือ a'' = a ^ b ^ a ซึ่งก็เป็น b นั่นเอง

นี่เป็นที่ใช้หนึ่งของ XOR

0 Comments:

Post a Comment

<< Home