位域
位域把数据以位的形式紧凑存储,并允许程序员对此结果进行位操作。
位域大小与对齐
- 位域结构体中未命名的结构体仅起到填充作用
unsigned int : 2;
- C语言中位域使用unsigned int作为基本单位,即使一个结构唯一成员为1Bit,结构体大小也和一个unsigned int 结构相同
- 一个位域成员不允许跨越两个unsigned int的界限,如果接下来的位域成员与该位域成员总位数超过一个unsigned int的大小,编译器会自动将下一个位域成员进行移位,使其对其下一个unsigned int
- 可以使用一个宽度为0的未命名位域成员使下一位域成员与下一个unsigned int对齐
unsigned int : 0;
位域重映射
- 将位域结构体地址映射到整型(int) 地址时会将位域各位清零
联合(Union)
在联合中,各成员共享一段内存空间,一个联合变量长度等于各成员中的最长长度。(共享 指的是该联合变量可被赋予任一成员的值,且赋予新值会冲去旧值)
- 可通过将位域声明为联合变量成员,利用联合的其他成员将位域归零