【发布时间】:2014-07-13 17:09:29
【问题描述】:
这里我有一个代码 sn-p。
#include <stdio.h>
int main()
{
struct value
{
int bit1 : 1;
int bit2 : 4;
int bit3 : 4;
} bit;
printf("%d",sizeof(bit));
return 0;
}
我得到的输出是 4(32 位编译器)。 谁能解释我怎么做?为什么不是 1+ 4 + 4 = 9? 我以前从未使用过位字段,所以希望得到一些帮助。谢谢你。 :)
【问题讨论】:
-
1+4+4=9 实际上是 1bit + 4bit + 4bit = 9bit 而不是 9char(
sizeof给出的大小是chars,而不是比特)。 -
使用 unsigned char 代替。参考。 #pragma pack(n) 也是。
-
每个结构都是 32 位的倍数(除非使用了 pragma pack)。所有的填充位都在那里,只是不容易看到。
-
是的,现在明白了,谢谢:)
标签: c bit-fields