Битовые поля и флаги
Компактно упаковывайте логические значения и небольшие поля.
«Битовые поля и флаги» — бесплатный урок Zig Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Many Flags, One Byte
Settings are often just on-or-off switches. Packing them as bit fields stores many flags in a single tiny integer.
Booleans Take One Bit
Inside a packed struct, a bool occupies exactly one bit. Stack several together and they share a single byte.
const Mode = packed struct {
bold: bool,
italic: bool,
underline: bool,
};Mix Bools and Small Ints
A packed struct can blend flags with narrow integers, modeling a real register where each bit group means something.
const Reg = packed struct {
enabled: bool,
speed: u3,
mode: u2,
};Read a Flag by Name
You access each bit through its field name, so the code reads clearly even though the data is tightly packed.
var m = Mode{ .bold = true, .italic = false, .underline = false };
if (m.bold) {}Flip a Flag
Set or clear a flag by assigning to the field. No bit masking by hand, Zig handles the bit math for you.
m.italic = true;The Raw Bits View
Need the underlying number? @bitCast turns the flag struct into its backing integer for storage or comparison.
const bits: u3 = @bitCast(m);Decode Incoming Bits
Reading bits from a file or device? Cast the raw integer back into your struct to decode it into named flags.
const incoming: u3 = 0b101;
const m: Mode = @bitCast(incoming);Enums as Bit Fields
A field can be an enum with a small backing integer, giving named choices that still fit in just a few bits.
const Speed = enum(u2) { slow, medium, fast };Why Bother Packing
Bit fields save memory and match hardware exactly, which matters in embedded code, drivers, and binary file formats.
Layout Stays Predictable
Because the struct is packed, the bit order never shifts. What you declare is what hardware and other programs will see.
Clear Code, Tight Data
The big win: you write readable field names while the data stays as compact as hand-rolled bit twiddling. 🎛️
Quick Check
Think about how much space a bool uses inside a packed struct.
Recap
You packed flags into one integer: bools take one bit, mix in narrow ints and enums, and @bitCast moves between struct and raw bits. 🎉
Часто задаваемые вопросы
Урок «Битовые поля и флаги» бесплатный?
Да — полный текст урока «Битовые поля и флаги» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.
Чему я научусь в уроке «Битовые поля и флаги»?
Компактно упаковывайте логические значения и небольшие поля. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Zig Academy?
Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Битовые поля и флаги»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Zig Academy?
Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- packed struct для точной раскладки
- Целые числа произвольной разрядности, например u3
- Битовые поля и флаги
- extern struct и раскладка ABI