一、位域
有些信息在存储时不占用一个完整的字节,而只需要占用几个甚至一个二进制位。为节省存储空间,并使处理简便,C语言提供了一种数据结构,成为”位域“或”位段“。C与C++允许指定占用特定位数的结构成员。字段的类型应为整型或枚举,接下来是冒号,冒号后面是一个数字,它指定了使用的位数,且可以使用没有名称的字段来提供间距。每个成员都被成为位字段。下面是一个例子。
struct reg{
unsigned int SN: 4;
unsigned int :4;
bool good:4;
};
//初始化
reg r={14, true};
二、大端小端对位域的影响。
定义的数据结构中包含bit位域,将按照一下规则存放。
- 低字节都存放在低地址;
- 大端模式首先为高bit位分配空间,小段模式首先为低bit位分配空间;
- 大端模式首先存放地址的高bit位,小端模式首先存放地址的低bit位;
举例:
struct {
short bit1:4;
short bit2:9;
short bit3:3;
};
大端模式下:
bit1(4位,顺序为a0a1a2a3) | bit2(高4位) |