0Pricing
C Academy · บทเรียน

ตัวดำเนินการระดับบิต

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตัวดำเนินการระดับบิต
  2. การเลื่อนบิต
  3. มาสก์บิตและแฟล็ก
  4. เทคนิคบิตที่ใช้ได้จริง
← กลับไปที่ C Academy