ฟิลด์บิตและแฟล็ก
จัดเก็บค่าบูลีนและฟิลด์ขนาดเล็กให้แน่นที่สุด
ฟิลด์บิตและแฟล็ก เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ
- จำนวนเต็มความกว้างตามต้องการ เช่น u3
- ฟิลด์บิตและแฟล็ก
- extern struct และโครงสร้างหน่วยความจำตาม ABI