1. บทนำ
ภาพรวมการดำเนินการบิตในภาษา C
ภาษา C มีการดำเนินการบิต (Bitwise Operation) เพื่อจัดการหน่วยความจำและโปรเซสเซอร์อย่างมีประสิทธิภาพ โดยหนึ่งในฟังก์ชันที่สำคัญที่สุดคือ “XOR (Exclusive OR)” การดำเนินการบิตมักถูกนำไปใช้ในหลากหลายสถานการณ์ เช่น การเข้ารหัสข้อมูล การตรวจสอบข้อมูล และการจัดการตัวเลข XOR มีคุณสมบัติที่จะคืนค่า “1” เมื่อบิตทั้งสองต่างกัน และ “0” เมื่อเหมือนกัน ซึ่งทำให้เป็นการดำเนินการที่เรียบง่ายแต่ทรงพลัง
บทความนี้จะอธิบายตั้งแต่พื้นฐานไปจนถึงการประยุกต์ใช้ XOR ในภาษา C พร้อมตัวอย่างโค้ดจริง เพื่อให้แม้แต่ผู้เริ่มต้นก็เข้าใจได้ง่าย
2. พื้นฐานของโอเปอเรเตอร์ XOR
XOR คืออะไร?
XOR (Exclusive OR) เป็นโอเปอเรเตอร์ที่ใช้เปรียบเทียบบิตของตัวเลขสองตัวแบบบิตต่อบิต โดยจะคืนค่า “1” เมื่อบิตทั้งสองแตกต่างกัน และ “0” เมื่อเหมือนกัน ตัวอย่างเช่น เมื่อเปรียบเทียบตัวเลข 5 กับ 9 แบบบิตต่อบิต จะได้ผลลัพธ์ดังนี้
- เลข 5 ในฐานสอง:
0101
- เลข 9 ในฐานสอง:
1001
เมื่อเปรียบเทียบบิตเหล่านี้ด้วย XOR จะได้ดังนี้
ตำแหน่งบิต | 5 (0101) | 9 (1001) | ผลลัพธ์ XOR |
---|---|---|---|
1 | 0 | 1 | 1 |
2 | 1 | 0 | 1 |
3 | 0 | 0 | 0 |
4 | 1 | 1 | 0 |
ผลลัพธ์คือ 1100
ซึ่งในฐานสิบคือ “12” การเข้าใจหลักการทำงานพื้นฐานของ XOR จะช่วยให้ประยุกต์ใช้กับการดำเนินการบิตที่ซับซ้อนยิ่งขึ้นได้
3. เข้าใจ XOR ด้วยโค้ดตัวอย่าง
ตัวอย่างการใช้งาน XOR พื้นฐาน
ตัวอย่างโค้ดง่าย ๆ สำหรับการดำเนินการ XOR ในภาษา C โค้ดนี้จะคำนวณ XOR ของตัวเลข 5 กับ 9 และแสดงผลลัพธ์
#include <stdio.h>
int main() {
int a = 5;
int b = 9;
int result = a ^ b;
printf("5 XOR 9 = %dn", result); // ผลลัพธ์คือ 12
return 0;
}
โค้ดนี้จะคำนวณ XOR ของ a
และ b
แล้วเก็บไว้ใน result
เมื่อรันจะได้ผลลัพธ์ “5 XOR 9 = 12” เหมาะสำหรับการทำความเข้าใจการดำเนินการแบบบิต
4. ตัวอย่างการประยุกต์ใช้ XOR
การสลับค่าตัวแปรด้วย XOR
ด้วยคุณสมบัติพิเศษของ XOR คุณสามารถสลับค่าของตัวแปรสองตัวได้โดยไม่ต้องใช้ตัวแปรชั่วคราว ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสลับค่าของ a
และ b
ด้วย XOR
#include <stdio.h>
int main() {
int a = 5;
int b = 7;
printf("ก่อนสลับค่า: a = %d, b = %dn", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("หลังสลับค่า: a = %d, b = %dn", a, b);
return 0;
}
โค้ดนี้จะใช้ XOR สามครั้งเพื่อสลับค่าของ a
และ b
อย่างมีประสิทธิภาพ โดยไม่ต้องใช้ตัวแปรชั่วคราว ช่วยประหยัดหน่วยความจำ

5. ตัวอย่างจริงและขอบเขตการประยุกต์ใช้
ตรวจหาตัวเลขซ้ำหรือที่ปรากฏเป็นจำนวนคี่ในอาเรย์
XOR ยังสามารถใช้ตรวจหาตัวเลขที่ซ้ำกันในอาเรย์ หรือค้นหาตัวเลขที่ปรากฏเป็นจำนวนคี่ได้อย่างมีประสิทธิภาพ ตัวอย่างโค้ดสำหรับค้นหาตัวเลขซ้ำ และค้นหาตัวเลขที่ปรากฏเป็นจำนวนคี่ มีดังนี้
การค้นหาตัวเลขซ้ำ
#include <stdio.h>
int findDuplicate(int nums[], int size) {
int duplicate = 0;
for (int i = 0; i < size; i++) {
duplicate ^= nums[i];
}
return duplicate;
}
int main() {
int nums[] = {1, 2, 3, 2, 4};
int size = sizeof(nums) / sizeof(nums[0]);
printf("Duplicate number is: %dn", findDuplicate(nums, size));
return 0;
}
โค้ดนี้ใช้ XOR เพื่อค้นหาตัวเลขที่ซ้ำกันในอาเรย์ ด้วยคุณสมบัติของ XOR ที่ค่าซ้ำกันจะกลายเป็น 0 จึงเหลือเฉพาะตัวที่ซ้ำในผลลัพธ์
การค้นหาตัวเลขที่ปรากฏเป็นจำนวนคี่
#include <stdio.h>
int findOddOccurrence(int nums[], int size) {
int result = 0;
for (int i = 0; i < size; i++) {
result ^= nums[i];
}
return result;
}
int main() {
int nums[] = {5, 3, 9, 3, 5, 9, 7};
int size = sizeof(nums) / sizeof(nums[0]);
printf("Odd occurring number is: %dn", findOddOccurrence(nums, size));
return 0;
}
โค้ดนี้จะตรวจหาตัวเลขที่ปรากฏเป็นจำนวนคี่ในอาเรย์ โดยจะเหลือตัวเลขนั้นในผลลัพธ์ของ XOR
การใช้ XOR ในการเข้ารหัสข้อมูล
XOR ยังใช้ในการเข้ารหัสข้อมูล ตัวอย่างโค้ดด้านล่างแสดงวิธีเข้ารหัสและถอดรหัสข้อมูลอย่างง่ายด้วย XOR
#include <stdio.h>
void encryptDecrypt(char data[], char key) {
for (int i = 0; data[i] != ' '; i++) {
data[i] = data[i] ^ key;
}
}
int main() {
char data[] = "Hello World";
char key = 'K';
printf("Original: %sn", data);
encryptDecrypt(data, key);
printf("Encrypted: %sn", data);
encryptDecrypt(data, key);
printf("Decrypted: %sn", data);
return 0;
}
ในโค้ดนี้ ข้อมูลจะถูกเข้ารหัสและถอดรหัสด้วย XOR เมื่อนำ XOR มาดำเนินการซ้ำกับข้อมูลเดิม ก็จะกลับเป็นค่าตั้งต้น เป็นเทคนิคเข้ารหัสที่เรียบง่ายแต่มีประโยชน์
6. สรุป
บทความนี้ได้อธิบายวิธีการใช้งาน XOR ในภาษา C ตั้งแต่พื้นฐานไปจนถึงการประยุกต์ใช้จริง XOR ถูกใช้ในงานด้านการเข้ารหัส ตรวจสอบข้อผิดพลาด การปรับปรุงประสิทธิภาพโปรแกรม และการออกแบบแฮชฟังก์ชัน ฯลฯ ด้วยความเร็วและประสิทธิภาพสูง จึงเป็นสิ่งสำคัญในงานที่ต้องประมวลผลข้อมูลจำนวนมากหรือเน้นสมรรถนะ
หวังว่าบทความนี้จะช่วยให้คุณเข้าใจพลังของการดำเนินการ XOR และสามารถนำไปใช้พัฒนาการเขียนโปรแกรมของคุณในอนาคตได้