เทคนิคบิตที่ใช้ได้จริง
เทคนิคที่พบบ่อย
เทคนิคบิตที่ใช้ได้จริง เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
เทคนิคบิตที่มีประโยชน์
เมื่อคุณเข้าใจตัวดำเนินการระดับบิตแล้ว คุณจะสามารถใช้เทคนิคสั้นกระชับได้หลายอย่าง เทคนิคเหล่านี้ทำงานรวดเร็วและมักพบในโค้ดจริง
เรามาดูเทคนิคที่ใช้บ่อยที่สุดกัน
#include <stdio.h>
int main(void) {
unsigned x = 6;
printf("x & 1 = %u (odd if 1)\n", x & 1);
return 0;
}เลขคู่หรือเลขคี่
บิตต่ำสุดใช้บอกความเป็นคู่หรือคี่ x & 1 มีค่าเป็น 1 สำหรับเลขคี่ และเป็น 0 สำหรับเลขคู่
#include <stdio.h>
int main(void) {
for (unsigned x = 0; x < 5; x++) {
printf("%u is %s\n", x, (x & 1) ? "odd" : "even");
}
return 0;
}การตรวจสอบเลขยกกำลังของสอง
จำนวนบวกจะเป็นเลขยกกำลังของสองเมื่อมีบิตที่ตั้งค่าอยู่เพียงหนึ่งบิต นิพจน์ x & (x - 1) จะมีค่าเป็น 0 เฉพาะในกรณีนี้
#include <stdio.h>
int is_pow2(unsigned x) {
return x != 0 && (x & (x - 1)) == 0;
}
int main(void) {
printf("%d %d %d\n", is_pow2(16), is_pow2(18), is_pow2(1));
return 0;
}ล้างบิตที่ตั้งค่าต่ำสุด
x & (x - 1) จะล้างบิตที่ตั้งค่าต่ำสุด นี่เป็นพื้นฐานของการนับบิตที่ตั้งค่าอย่างรวดเร็ว
#include <stdio.h>
int main(void) {
unsigned x = 0b10110;
printf("before: %u\n", x);
printf("after: %u\n", x & (x - 1));
return 0;
}แยกบิตที่ตั้งค่าต่ำสุด
x & (-x) จะแยกบิตที่ตั้งค่าต่ำสุดออกมา ทำให้เหลือบิตนั้นเพียงบิตเดียวที่เปิดอยู่
วิธีนี้อาศัยการแทนค่าแบบส่วนเติมเต็มสอง
#include <stdio.h>
int main(void) {
unsigned x = 0b10110;
printf("lowest set bit = %u\n", x & (-x));
return 0;
}การนับบิตที่ตั้งค่า
การล้างบิตที่ตั้งค่าต่ำสุดซ้ำไปเรื่อย ๆ จะนับจำนวนบิตที่ถูกตั้งค่า โดยใช้จำนวนขั้นตอนเท่ากับจำนวนบิตที่ตั้งค่า
#include <stdio.h>
int popcount(unsigned x) {
int n = 0;
while (x) { x &= (x - 1); n++; }
return n;
}
int main(void) {
printf("%d\n", popcount(255));
printf("%d\n", popcount(0b1010));
return 0;
}การสลับค่าโดยไม่ใช้ตัวแปรชั่วคราว
การสลับค่าแบบ XOR ใช้แลกเปลี่ยนจำนวนเต็มสองจำนวนโดยไม่ต้องใช้พื้นที่จัดเก็บเพิ่มเติม
#include <stdio.h>
int main(void) {
int a = 3, b = 8;
a ^= b; b ^= a; a ^= b;
printf("a=%d b=%d\n", a, b);
return 0;
}ปัดขึ้นเป็นเลขยกกำลังของสอง
คุณสามารถปัดค่าชนิด unsigned ขึ้นเป็นเลขยกกำลังของสองถัดไปได้ โดยกระจายบิตสูงสุดลงมาทางขวา แล้วบวก 1
#include <stdio.h>
unsigned next_pow2(unsigned v) {
v--;
v |= v >> 1; v |= v >> 2; v |= v >> 4;
v |= v >> 8; v |= v >> 16;
return v + 1;
}
int main(void) {
printf("%u\n", next_pow2(17));
printf("%u\n", next_pow2(100));
return 0;
}การตรวจสอบว่าบิตแตกต่างกันหรือไม่
ค่าทั้งสองมีบิตต่างกันตรงตำแหน่งที่ a ^ b มีบิตที่ตั้งค่าอยู่ เมื่อนับบิตเหล่านั้นก็จะได้ระยะห่างแฮมมิง
#include <stdio.h>
int main(void) {
unsigned a = 0b1101, b = 0b1011;
unsigned diff = a ^ b;
int count = 0;
while (diff) { diff &= diff - 1; count++; }
printf("hamming distance = %d\n", count);
return 0;
}หาค่าสัมบูรณ์โดยไม่ใช้การแยกทาง
คุณสามารถใช้บิตเครื่องหมายคำนวณค่าสัมบูรณ์โดยไม่ใช้ if มาสก์จะมีค่าเป็น 1 ทั้งหมดสำหรับจำนวนลบ และมีค่าเป็น 0 ทั้งหมดสำหรับจำนวนที่ไม่เป็นลบ
#include <stdio.h>
int main(void) {
int x = -42;
int mask = x >> 31;
int abs = (x + mask) ^ mask;
printf("abs = %d\n", abs);
return 0;
}การตั้งค่าบิตตามดัชนี
รวมการเลื่อนกับ OR เพื่อตั้งค่าตำแหน่งบิตใด ๆ ที่คำนวณขึ้นขณะโปรแกรมทำงาน
#include <stdio.h>
int main(void) {
unsigned v = 0;
int positions[] = {1, 3, 5};
for (int i = 0; i < 3; i++) {
v |= (1u << positions[i]);
}
printf("v = %u\n", v);
return 0;
}ตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับเทคนิคบิตของคุณ
ทบทวน
คุณได้เรียนรู้เทคนิคบิตที่ใช้ได้จริง:
x & 1ใช้ตรวจสอบเลขคู่หรือเลขคี่x & (x - 1)ล้างบิตที่ตั้งค่าต่ำสุดและตรวจจับเลขยกกำลังของสองx & (-x)แยกบิตที่ตั้งค่าต่ำสุดออกมา- การนับบิต การสลับค่าแบบ XOR ระยะห่างแฮมมิง และการหาค่าสัมบูรณ์โดยไม่ใช้การแยกทาง
คำถามที่พบบ่อย
บทเรียน “เทคนิคบิตที่ใช้ได้จริง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เทคนิคบิตที่ใช้ได้จริง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เทคนิคบิตที่ใช้ได้จริง”
เทคนิคที่พบบ่อย คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “เทคนิคบิตที่ใช้ได้จริง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวดำเนินการระดับบิต
- การเลื่อนบิต
- มาสก์บิตและแฟล็ก
- เทคนิคบิตที่ใช้ได้จริง