static struct{
unsigned a:5;
unsigned b:5;
unsigned c:5;
unsigned d:5;
}v={1,2,3,4};
printf("%d %d %d %d %d",v.a,v.b,v.c,v.d,sizeof(v));
输出是:1 2 3 4 4
有人可以解释为什么这个结构4的大小?不应该是16岁吗?
答案 0 :(得分:10)
你正在使用20位,恰好适合4个字节。不需要16个字节。
我认为它实际上是必需的,它们就像那样包装:
6.7.2.1
实现可以分配任何可寻址的存储单元 足以举行一场比赛。如果剩余足够的空间,那就是一个小小的领域 紧跟在结构中的另一个位字段将被打包 进入相同单位的相邻位
答案 1 :(得分:6)
Bitfields打包这个位,所以你的20位很适合32位int,而不是四种不同的int。