先贴示例代码,声明
struct{
unsigned int a:4;
unsigned int b:5;
unsigned char c:5;
unsigned int d:4;
}flags;
int main(void)
{
int c=sizeof(flags);
printf("%d\n",c);
return 0;
}/*int有32位,4个字节,题目中flage仅使用了18位*/
:后面的数字代表该成员拥有的位宽,常常置1,通过 `flage.a = 0;` 可以将该字段置0。
位字段在结构体中占用空间,根据存储的单元决定对齐,本例中使用int存储,当各字段宽度和不超过32位时,不考虑对齐。