需求

有些时候,一些数据只占用几个 bit,而且是紧密排列的,所以就会考虑使用结构体位域,最好能再带上 union,使用起来会更加方便,但是位域是否字节对齐?

解决

经过测试,如果每一段的位域都在单个字节内,没有跨字节,那么就可以直接使用,字节是对齐的。否则每个跨字节的位域会多占用一个字节,会造成整体的数据错位。

参考

结构体(Struct)、联合体(Union)和位域

union联合体与内存对齐

C语言位域(位段)详解

UNION和位域的使用