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

ฟิลด์บิตและแฟล็ก

จัดเก็บค่าบูลีนและฟิลด์ขนาดเล็กให้แน่นที่สุด

ฟิลด์บิตและแฟล็ก เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

แฟล็กจำนวนมากในหนึ่งไบต์

การตั้งค่ามักเป็นเพียงสวิตช์เปิดหรือปิด การจัดเก็บเป็นฟิลด์บิตช่วยเก็บแฟล็กจำนวนมากไว้ในจำนวนเต็มขนาดเล็กเพียงค่าเดียว

ค่าบูลีนใช้หนึ่งบิต

ภายใน packed struct ค่า bool ใช้พื้นที่พอดีหนึ่งบิต วางหลายค่าต่อกันก็สามารถใช้ไบต์เดียวร่วมกันได้

const Mode = packed struct {
    bold: bool,
    italic: bool,
    underline: bool,
};

ผสม Bool กับจำนวนเต็มขนาดเล็ก

Packed struct สามารถผสมแฟล็กกับจำนวนเต็มความกว้างน้อย เพื่อจำลองรีจิสเตอร์จริงที่แต่ละกลุ่มบิตมีความหมายของตัวเอง

const Reg = packed struct {
    enabled: bool,
    speed: u3,
    mode: u2,
};

อ่านแฟล็กด้วยชื่อ

คุณเข้าถึงแต่ละบิตผ่านชื่อฟิลด์ได้ โค้ดจึงอ่านเข้าใจง่าย แม้ข้อมูลจะถูกบีบอัดไว้อย่างแน่นหนา

var m = Mode{ .bold = true, .italic = false, .underline = false };
if (m.bold) {}

สลับค่าแฟล็ก

ตั้งค่าหรือล้างแฟล็กด้วยการกำหนดค่าให้ฟิลด์ ไม่ต้องทำบิตมาสก์ด้วยมือ เพราะ Zig จัดการการคำนวณบิตให้คุณ

m.italic = true;

มุมมองบิตดิบ

ต้องการตัวเลขพื้นฐานหรือไม่ @bitCast จะเปลี่ยน struct ของแฟล็กเป็นจำนวนเต็มพื้นฐานเพื่อใช้จัดเก็บหรือเปรียบเทียบ

const bits: u3 = @bitCast(m);

ถอดรหัสบิตขาเข้า

กำลังอ่านบิตจากไฟล์หรืออุปกรณ์อยู่หรือไม่ แคสต์จำนวนเต็มดิบกลับเป็น struct เพื่อถอดรหัสให้เป็นแฟล็กที่มีชื่อ

const incoming: u3 = 0b101;
const m: Mode = @bitCast(incoming);

Enum ในฐานะฟิลด์บิต

ฟิลด์หนึ่งสามารถเป็น enum ที่มีจำนวนเต็มพื้นฐานขนาดเล็กได้ ทำให้มีตัวเลือกที่มีชื่อและยังใช้พื้นที่เพียงไม่กี่บิต

const Speed = enum(u2) { slow, medium, fast };

เหตุใดจึงต้องบีบอัด

ฟิลด์บิตช่วยประหยัดหน่วยความจำและตรงกับฮาร์ดแวร์อย่างแม่นยำ ซึ่งสำคัญในโค้ดแบบฝังตัว ไดรเวอร์ และรูปแบบไฟล์ไบนารี

เลย์เอาต์ยังคงคาดเดาได้

เนื่องจาก struct ถูกบีบอัด ลำดับบิตจึงไม่เปลี่ยน สิ่งที่คุณประกาศคือสิ่งที่ฮาร์ดแวร์และโปรแกรมอื่น ๆ จะมองเห็น

โค้ดชัดเจน ข้อมูลกะทัดรัด

ข้อดีสำคัญคือ คุณเขียนชื่อฟิลด์ที่อ่านง่ายได้ ขณะที่ข้อมูลยังคงกะทัดรัดเทียบเท่าการจัดการบิตด้วยมือ 🎛️

ตรวจสอบอย่างรวดเร็ว

ลองคิดดูว่า bool ใช้พื้นที่เท่าใดภายใน packed struct

ทบทวน

คุณได้บีบอัดแฟล็กไว้ในจำนวนเต็มค่าเดียว: bool ใช้หนึ่งบิต ผสมจำนวนเต็มความกว้างน้อยและ enum ได้ และ @bitCast ใช้แปลงระหว่าง struct กับบิตดิบ 🎉

คำถามที่พบบ่อย

บทเรียน “ฟิลด์บิตและแฟล็ก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟิลด์บิตและแฟล็ก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ฟิลด์บิตและแฟล็ก”

จัดเก็บค่าบูลีนและฟิลด์ขนาดเล็กให้แน่นที่สุด คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ฟิลด์บิตและแฟล็ก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ
  2. จำนวนเต็มความกว้างตามต้องการ เช่น u3
  3. ฟิลด์บิตและแฟล็ก
  4. extern struct และโครงสร้างหน่วยความจำตาม ABI
← กลับไปที่ Zig Academy