Zig Cookbook

介绍

位域

packed struct(压缩结构体)的字段总是按照它们写入的顺序在内存中布局,没有填充,因此它们非常适合表示位域。

在压缩结构体中,布尔值表示为 1 位,Zig 还有任意位宽的整数,如 u28、u1 等。

const std = @import("std");
const print = std.debug.print;

const ColorFlags = packed struct(u32) {
    red: bool = false,
    green: bool = false,
    blue: bool = false,

    _padding: u29 = 0,
};

pub fn main() !void {
    const tom: ColorFlags = @bitCast(@as(u32, 0xFF));

    if (tom.red) {
        print("Tom likes red.\n", .{});
    }

    if (tom.red and tom.green) {
        print("Tom likes red and green.\n", .{});
    }

    const jerry: ColorFlags = @bitCast(@as(u32, 0x01));

    if (jerry.red) {
        print("Jerry likes red.\n", .{});
    }

    if (jerry.red and !jerry.green) {
        print("Jerry likes red, not green.\n", .{});
    }
}

参考

上一示例:创建和相加复数
下一示例:单向链表