例题:

上面的 _a : 2 意思是占 2 个bit位
_b : 5 意思是占 5 个bit位
_c : 10 意思是占 10 个bit位
_d : 30 意思是占 30 个bit位
复习一下知识:
8 bit = 1 字节
4 字节 = 一个整形(int)
上面所有成员加起来也就是 47 bit,大概就是 二个整形的大小
那答案为什么是 8 ?
那么上面的例题中的结构体中位段是怎么分配空间的呢?
int是占4个字节,那么最多只能是32 bit位,不能超过它例题:
struct S
{
char a:3;
char b:4;
char c:5;
char d:4;
};
int main()
{
struct S n = { 0 };
n.a = 10;
n.b = 12;
n.c = 3;
n.d = 4;
return 0;
}
图解:
这是在 vs 2022编译器测试数据


位段的空间上是按照4个字节( int )或者1个字节( char )的方式来开辟的一个字节内部的数据是先使用低地址在使用高地址,从右向左使用(char 类型)