Bitwise Operator ในภาษา C#
Bitwise Operator (ตัวดำเนินการระดับบิต) คือเครื่องหมายที่ใช้สำหรับ จัดการข้อมูลในระดับบิต (bit) ของค่าจำนวนเต็ม (int, long, byte, ฯลฯ) โดยตรง
ในภาษา C#, ทุกค่าตัวเลขถูกเก็บในรูปแบบของ “เลขฐานสอง” ซึ่งประกอบด้วยบิต (0 หรือ 1) และ Bitwise Operator จะช่วยให้เราสามารถควบคุมหรือเปลี่ยนแปลงบิตเหล่านั้นได้โดยตรง
พูดง่าย ๆ คือ Bitwise Operator ช่วยให้เราสามารถ “เปิด/ปิด/ตรวจสอบ” สถานะบิตแต่ละตัวภายในค่าตัวเลขได้
Bitwise Operator มักถูกใช้ในงานที่ต้องการประสิทธิภาพสูง เช่น
- การควบคุมฮาร์ดแวร์ (Hardware Control)
- การเข้ารหัสข้อมูล (Encryption)
- การจัดการ Permission หรือ Flag
- การเขียนเกม และการบีบอัดข้อมูล (Compression)
ประเภทของ Bitwise Operator ในภาษา C#
ในภาษา C# มี Bitwise Operator หลักอยู่ 6 ตัว ดังนี้
| ตัวดำเนินการ | ชื่อ (Operator Name) | คำอธิบาย | ตัวอย่าง | ผลลัพธ์ (เมื่อ a = 5, b = 3) |
|---|---|---|---|---|
& | Bitwise AND | คืนค่า 1 เมื่อบิตของทั้งสองตัวเป็น 1 | a & b | 1 |
| | Bitwise OR | คืนค่า 1 เมื่อบิตของอย่างน้อยหนึ่งตัวเป็น 1 | a | b | 7 |
^ | Bitwise XOR | คืนค่า 1 เมื่อบิตของทั้งสองต่างกัน | a ^ b | 6 |
~ | Bitwise NOT | กลับค่าบิตทั้งหมด (0 → 1, 1 → 0) | ~a | -6 |
<< | Left Shift | เลื่อนบิตไปทางซ้ายตามจำนวนที่ระบุ | a << 1 | 10 |
>> | Right Shift | เลื่อนบิตไปทางขวาตามจำนวนที่ระบุ | a >> 1 | 2 |
ตัวอย่างการคำนวณแบบ Binary
ก่อนเข้าใจตัวดำเนินการ เรามาดูตัวเลขในรูปแบบฐานสองก่อน
a = 5 → 0101
b = 3 → 0011
เมื่อทำการคำนวณแบบ Bitwise จะเปรียบเทียบ “แต่ละบิต” ของทั้งสองค่า
Bitwise AND (&)
ตัวดำเนินการ & จะคืนค่า 1 ก็ต่อเมื่อบิตของทั้งสองค่ามีค่าเป็น 1 ทั้งคู่
int a = 5; // 0101
int b = 3; // 0011
int result = a & b;
Console.WriteLine(result);0101 (a)
0011 (b)
-----
0001 → ผลลัพธ์คือ 1
ใช้เมื่อต้องการ “ตรวจสอบสถานะบิต” ว่ามีบิตใดเปิดอยู่บ้าง
Bitwise OR (|)
ตัวดำเนินการ | จะคืนค่า 1 เมื่อมีบิตใดบิตหนึ่งเป็น 1
int a = 5; // 0101
int b = 3; // 0011
int result = a | b;
Console.WriteLine(result);0101
0011
-----
0111 → ผลลัพธ์คือ 7
ใช้เมื่อต้องการ “รวมสถานะบิต” เช่น การเปิดหลาย permission พร้อมกัน
Bitwise XOR (^)
ตัวดำเนินการ ^ (Exclusive OR) จะคืนค่า 1 เฉพาะเมื่อบิตทั้งสองต่างกัน
int a = 5; // 0101
int b = 3; // 0011
int result = a ^ b;
Console.WriteLine(result);0101
0011
-----
0110 → ผลลัพธ์คือ 6
ใช้ในงานเข้ารหัส (Encryption/Decryption) เพราะสามารถ “กลับบิต” ได้ด้วยตัวเองซ้ำสองครั้งจะคืนค่าต้นฉบับ
Bitwise NOT (~)
ตัวดำเนินการ ~ ใช้ “กลับค่าบิตทั้งหมด” (0 → 1, 1 → 0)
int a = 5; // 0000 0101
int result = ~a;
Console.WriteLine(result);0000 0101 → 1111 1010 (ในระบบ signed integer = -6)
หมายเหตุ: ใน C# ใช้ระบบ Two’s Complement สำหรับตัวเลขลบ ดังนั้นผลลัพธ์จะเป็นค่าลบ
Left Shift (<<)
เลื่อนบิตทั้งหมดไปทางซ้ายตามจำนวนที่ระบุ บิตที่หลุดออกจะหายไป และเติมศูนย์ทางขวา
int a = 5; // 0101
int result = a << 1;
Console.WriteLine(result);0101 << 1 → 1010 → ผลลัพธ์คือ 10
ใช้เมื่อต้องการ “คูณค่าด้วย 2” ต่อครั้ง เช่น a << 3 เท่ากับ a * 8
Right Shift (>>)
เลื่อนบิตทั้งหมดไปทางขวาตามจำนวนที่ระบุ บิตที่หลุดทางขวาจะหายไป
int a = 10; // 1010
int result = a >> 1;
Console.WriteLine(result);1010 >> 1 → 0101 → ผลลัพธ์คือ 5
ใช้เมื่อต้องการ “หารค่าด้วย 2” ต่อครั้ง เช่น a >> 2 เท่ากับ a / 4
การใช้ Bitwise Operator ในการจัดการ Permission
Bitwise Operator มักใช้ในระบบที่ต้องกำหนด “สิทธิ์” หรือ “สถานะ” หลายอย่างในค่าตัวเลขเดียว
const int READ = 1; // 0001
const int WRITE = 2; // 0010
const int EXEC = 4; // 0100
int permission = READ | WRITE; // รวมสิทธิ์อ่านและเขียน
// ตรวจสอบสิทธิ์
bool canWrite = (permission & WRITE) == WRITE;
Console.WriteLine($"มีสิทธิ์เขียนหรือไม่: {canWrite}");READ,WRITE,EXECถูกแทนด้วยค่าบิตที่แตกต่างกัน|ใช้รวมสิทธิ์หลายอย่างไว้ในตัวแปรเดียว&ใช้ตรวจสอบว่ามีสิทธิ์นั้นอยู่หรือไม่
เทคนิคนี้ใช้กันทั่วไปในระบบปฏิบัติการ, การจัดการไฟล์, และเกมเอนจิ้น
ข้อควรระวังในการใช้ Bitwise Operator
- ใช้ได้เฉพาะกับชนิดข้อมูลเลขจำนวนเต็ม (
int,long,byte,short) เท่านั้น - ผลลัพธ์อาจเป็นค่าลบ เมื่อใช้กับ
~เพราะระบบเก็บค่าลบแบบ Two’s Complement - อย่าสับสนกับ Logical Operators (
&&,||,!) Bitwise ทำงานที่ระดับบิต แต่ Logical ทำงานที่ระดับ boolean
Bitwise Operator คือเครื่องมือที่ทรงพลังสำหรับการจัดการข้อมูลในระดับบิตในภาษา C#
แม้ว่าจะไม่ค่อยถูกใช้ในงานทั่วไป แต่ในงานเฉพาะทาง เช่น การเขียนเกม, การเข้ารหัส, และการทำงานกับฮาร์ดแวร์ Bitwise Operator ช่วยให้โปรแกรมทำงานได้รวดเร็วและมีประสิทธิภาพมากขึ้น
