位域

来源:互联网 发布: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

原创粉丝点击