在C中定义位字段时的输出行为

时间:2011-11-26 05:31:24

标签: c

#include <stdio.h>

int main()
{
    struct value
    {
        int bit1:1;
        int bit2:4;
        int bit3:4;
    } bit;

    printf ("%d\n", sizeof(bit));
    return 0;
}

Tc / Tc ++上的输出:

  

2

Linux下的输出:

  

4

我知道我错过了一些比特字段的概念。

2 个答案:

答案 0 :(得分:2)

结构的sizeof与所有元素的大小总和不同 - 特别是位域的情况。

通常,结构需要填充到一定的大小和对齐。 (显然在Tc / Tc ++上是2,在Linux中是4。)

因此虽然只使用了9位,但它被填充到字大小。

编辑:

请注意,C标准未指定填充量。因此,您从两个不同的编译器得到不同的结果。

答案 1 :(得分:1)

您的结构大小向上舍入到机器字。想一想 - 它如何在内存或寄存器中存储(和寻址)?