C或C++允许在结构体中以位为单位设置成员所占的内存空间,以位为单位的结构体成员,简称为位域或位段(Bit field)。位域的优点是节省空间,还可以进行内存对齐。常用于定义网络通讯协议或者应用程序标志位信息。
- 一般数据类型使用整型或者无符号整型。
- 一个位域必须存储在同一个字节中,如一个字节所剩空间不够存放另一位域,从下一单元存该位域。
- 无名位域来作填充或调整位置,无法使用。
- 位域长度为0则下一个位域从下一个字节开始,而且定义长度为0的位段不能指明名字
定义格式:数据类型 变量名:位域大小
举个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <stdio.h>
struct ApplicationFlags {
unsigned int IS_RUNABLE:1; // 取值范围1bit=[0,1]
unsigned int :4; // 无名位域
unsigned int AGE:2; // 取值范围2bit=[0,3]
};
void main() {
struct ApplicationFlags flags;
flags.IS_RUNABLE = 1;
flags.AGE = 2;
printf("sizeof(flags)=%d\n", sizeof(flags));
printf("flags.IS_RUNABLE=%d\n", flags.IS_RUNABLE);
printf("flags.AGE=%d\n", flags.AGE);
}
// 使用PellesC执行结果:
// sizeof(flags)=4
// flags.IS_RUNABLE=1
// flags.AGE=2
|