1、定义声明
位段成员必须声明为int、unsigned int或signed int类型(shortcharlong )。 位域定义和位域变量说明位域定义与结构定义类似,其形式如下:
结构域结构名称
{位域列表};
其中,域列表的格式如下:
类型说明符位域名:位域长度
例如,struct packed_struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
无符号输入类型:4;
unsigned int my_int:9;
}
struct packed_struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
无符号输入类型:4;
unsigned int my_int:9;
(面膜;
使用情况如下。 #包含
#包含
struct packed_struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
无符号输入类型:4;
unsigned int my_int:9;
(面膜;
int main ()。
printf(%d(n ),(int ) sizeof ) structpacked_struct );
返回0;
}
2、位域作用和存储吉鲁
使用位域的主要作用是压缩存储,大致规则如下。
1 )如果相邻字段的类型相同,且其总位宽小于类型sizeof大小,则后续字段将紧靠前一个字段存储,直到无法容纳为止
2 )如果相邻位场类型相同,且总位宽大于类型sizeof大小,则后续字段将从新存储单元偏移类型大小的整数倍。
3 )相邻位域字段类型不同,各编译器具体实现有差别,VC6采用未压缩方式,Dev-C、GCC采用压缩方式;
4 )如果在位域字段之间插入了非位域字段,则不进行压缩。
5 )整个结构的总大小是最广泛的基本类型成员大小的整数倍。