2.22. 位域

位域是一种无名类型,它在单个整数中表示最多 32 位标志的集合:

var t : bitfield < one,two,three >

有一个简写类型别名语法来定义位域:

bitfield bits123 {
    one
    two
    three
}

typedef bits123 = bitfield<one; two; three> // 与上述声明完全相同

任意两个位域都是相同的类型,表示 32 位整数:

var a : bitfield<one; two; three>
var b : bitfield<one; two>
b = a

单个标志可以像常规 bool 字段一样读取:

var t : bitfield < one; two; three >
assert(!t.one)

如果 alias 可用,则可以通过 alias 表示法构造 bitfield:

assert(t==bits123 three)

Bitfields 可以通过整数值构造。提供有限的二进制逻辑运算符:

var t : bitfield < one; two; three > = bitfield(1<<1) | bitfield(1<<2)
assert(!t.one && t.two && t.three)
assert("{t}"=="(two|three)")
t ^= bitfield(1<<1)