定义
定义具有可变长度位的结构成员,按位来表示信息
struct device {
int active:1; //冒号后为所需位数
int ready:1;
int :0; //空域(宽度为 0 的一个未命名位域),强制下一位域对齐到其下一单元
int error:2;
int :3; //该3位不能使用
int type:2;
}laptop;
应用
struct bit {
unsigned b0:1, b1:1, b2:1, b3:1;
}*sp;
int a = 127;
int* p = &a;
sp = (struct bit*)p; //sp也指向了a
printf("%d %d %d %d\n", sp->b0, sp->b1, sp->b2, sp->b3);
//1 1 1 1
Tips
- 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止
- 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍
- 无名的位域不能使用,仅用来填充或调整位置
- 位域在本质上就是一种结构类型, 不过其成员是按二进位分配的
- 整个结构体的总大小为最宽基本类型成员大小的整数倍