Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
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吗?
您正在使用 20 位,非常适合 4 个字节。不需要 16 个字节。
我认为实际上需要像这样包装它们:
6.7.2.1 实现可以分配任何大到足以容纳位域的可寻址存储单元。如果有足够的空间,结构中紧跟在另一个位域之后的位域应该被打包到同一单元的相邻位中
6.7.2.1
实现可以分配任何大到足以容纳位域的可寻址存储单元。如果有足够的空间,结构中紧跟在另一个位域之后的位域应该被打包到同一单元的相邻位中
位域打包位,因此您的 20 位非常适合 32 位 int,而不是四个不同的 int。