位域
来源:互联网 发布:java分支语句行李 编辑:程序博客网 时间:2024/06/14 00:14
定义
定义具有可变长度位的结构成员,按位来表示信息
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也指向了aprintf("%d %d %d %d\n", sp->b0, sp->b1, sp->b2, sp->b3);//1 1 1 1
Tips
- 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止
- 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍
- 无名的位域不能使用,仅用来填充或调整位置
- 位域在本质上就是一种结构类型, 不过其成员是按二进位分配的
- 整个结构体的总大小为最宽基本类型成员大小的整数倍
http://blog.chinaunix.net/uid-28697486-id-3511598.html
阅读全文
0 0