ตัวดำเนินการระดับบิต
AND, OR, XOR, NOT
ตัวดำเนินการระดับบิต เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
การทำงานในระดับบิต
จำนวนเต็มถูกจัดเก็บเป็นลำดับของบิต ภาษา C ช่วยให้คุณดำเนินการกับบิตเหล่านั้นได้โดยตรงด้วยตัวดำเนินการระดับบิต
ตัวดำเนินการหลักสี่ตัวคือ AND &, OR |, XOR ^ และ NOT ~
#include <stdio.h>
int main(void) {
unsigned a = 12;
unsigned b = 10;
printf("a & b = %u\n", a & b);
return 0;
}AND ระดับบิต
ตัวดำเนินการ & ตั้งค่าบิตผลลัพธ์เป็น 1 เฉพาะเมื่อบิตอินพุตทั้งสองบิตเป็น 1
สำหรับ 12 (1100) และ 10 (1010) ผลลัพธ์คือ 8 (1000)
#include <stdio.h>
int main(void) {
unsigned a = 12, b = 10;
printf("%u & %u = %u\n", a, b, a & b);
return 0;
}OR ระดับบิต
ตัวดำเนินการ | ตั้งค่าบิตผลลัพธ์เป็น 1 เมื่อบิตอินพุตอย่างน้อยหนึ่งบิตเป็น 1
12 (1100) OR 10 (1010) เท่ากับ 14 (1110)
#include <stdio.h>
int main(void) {
unsigned a = 12, b = 10;
printf("%u | %u = %u\n", a, b, a | b);
return 0;
}XOR ระดับบิต
ตัวดำเนินการ ^ (OR แบบเลือกเฉพาะ) ตั้งค่าบิตผลลัพธ์เป็น 1 เมื่อบิตอินพุตแตกต่างกัน
12 (1100) XOR 10 (1010) เท่ากับ 6 (0110)
#include <stdio.h>
int main(void) {
unsigned a = 12, b = 10;
printf("%u ^ %u = %u\n", a, b, a ^ b);
return 0;
}NOT ระดับบิต
ตัวดำเนินการ ~ กลับค่าบิตทุกบิต สำหรับค่าไม่มีเครื่องหมาย ~0 จะเป็นเลขหนึ่งทุกบิต ซึ่งเป็นค่าสูงสุด
#include <stdio.h>
int main(void) {
unsigned char x = 0;
printf("~0 as 8-bit = %u\n", (unsigned char)~x);
return 0;
}การแสดงบิต
ฟังก์ชันช่วยที่แสดงรูปแบบเลขฐานสองของไบต์จะทำให้เข้าใจผลลัพธ์ระดับบิตได้ง่ายขึ้น เราจะตรวจสอบแต่ละบิตจากสูงไปต่ำ
#include <stdio.h>
void print_bits(unsigned char v) {
for (int i = 7; i >= 0; i--) {
putchar((v >> i) & 1 ? '1' : '0');
}
putchar('\n');
}
int main(void) {
print_bits(12);
print_bits(10);
return 0;
}การสลับด้วย XOR
XOR มีคุณสมบัติที่น่าสนใจคือ คุณสามารถสลับจำนวนเต็มสองจำนวนได้โดยไม่ต้องใช้ตัวแปรชั่วคราว
ใช้ XOR สามครั้งเพื่อแลกเปลี่ยนค่า
#include <stdio.h>
int main(void) {
int a = 5, b = 9;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d\n", a, b);
return 0;
}XOR กับตัวมันเอง
ค่าใดก็ตามที่ทำ XOR กับตัวมันเองจะได้ 0 และค่าใดก็ตามที่ทำ XOR กับ 0 จะไม่เปลี่ยนแปลง
อัตลักษณ์เหล่านี้เป็นพื้นฐานของการสลับด้วย XOR และเทคนิคอีกมากมาย
#include <stdio.h>
int main(void) {
int x = 42;
printf("x ^ x = %d\n", x ^ x);
printf("x ^ 0 = %d\n", x ^ 0);
return 0;
}ระดับบิตกับเชิงตรรกะ
อย่าสับสนระหว่าง & กับ && หรือ | กับ ||
- ตัวดำเนินการระดับบิตทำงานกับทุกบิตของตัวถูกดำเนินการ
- ตัวดำเนินการเชิงตรรกะจะประเมินค่าความจริงและคืนค่า 0 หรือ 1
#include <stdio.h>
int main(void) {
printf("2 & 1 = %d\n", 2 & 1);
printf("2 && 1 = %d\n", 2 && 1);
return 0;
}การรวมตัวดำเนินการ
ตัวดำเนินการระดับบิตสามารถนำมารวมกันเพื่อแสดงเงื่อนไขที่ซับซ้อนได้ ในที่นี้เราจะเก็บบิตที่มีอยู่ใน a แต่ไม่มีใน b
#include <stdio.h>
int main(void) {
unsigned a = 0b1111;
unsigned b = 0b0101;
unsigned only_a = a & ~b;
printf("only_a = %u\n", only_a);
return 0;
}การตรวจสอบพาริตีด้วย XOR
การทำ XOR กับบิตทั้งหมดจะบอกพาริตี (ว่าจำนวนบิตที่ตั้งค่าเป็น 1 เป็นจำนวนคี่หรือไม่) ให้ยุบค่าลงซ้ำ ๆ
#include <stdio.h>
int main(void) {
unsigned v = 0b1011;
int parity = 0;
while (v) {
parity ^= (v & 1);
v >>= 1;
}
printf("parity = %d\n", parity);
return 0;
}ตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับตัวดำเนินการระดับบิต
สรุปทบทวน
คุณได้เรียนรู้ตัวดำเนินการระดับบิต:
&AND เก็บบิตที่ตั้งค่าเป็น 1 ในตัวถูกดำเนินการทั้งสองตัว|OR เก็บบิตที่ตั้งค่าเป็น 1 ในตัวถูกดำเนินการตัวใดตัวหนึ่ง^XOR เก็บบิตที่แตกต่างกัน~NOT กลับค่าบิตทั้งหมด- ระดับบิตแตกต่างจากเชิงตรรกะอย่าง
&&และ||
คำถามที่พบบ่อย
บทเรียน “ตัวดำเนินการระดับบิต” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวดำเนินการระดับบิต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวดำเนินการระดับบิต”
AND, OR, XOR, NOT คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวดำเนินการระดับบิต” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวดำเนินการระดับบิต
- การเลื่อนบิต
- มาสก์บิตและแฟล็ก
- เทคนิคบิตที่ใช้ได้จริง