1、为了节省空间,操作方便,C语言提供一种数据结构:位域。申明如下:
struct bitfield{
char a:2; #a占2位
char b:3; #b占3位
char c:2; #c占2位
}bf;
2、基本规则:
(1)如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字
段将紧邻前一个字段存储,直到不能容纳为止;
例子:
int main()
{
struct bitfield{
char a:2;
char b:3;
char c:2;
}bf;
printf("%d\n",sizeof(bf)); # 1
return 0;
}
2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字
段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
例子:
int main()
{
struct bitfield{
char a:2;
char b:3;
char c:2;
char d:2;
}bf;
printf("%d\n",sizeof(bf)); # 2
return 0;
}
3) 整个结构体的总大小为最宽基本类型成员大小的整数倍
例程:
int main()
{
struct bitfield{
char a:2;
char b:3;
char c:2;
int d:4;
}bf;
printf("%d\n",sizeof(bf)); #8
return 0;
}
int main()
{
struct bitfield{
char a:2;
int d;
char b:3;
char c:2;
}bf;
printf("%d\n",sizeof(bf)); #12
return 0;
}