1
    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ではないですか?

4

2 に答える 2

10

4バイトにうまく収まる20ビットを使用しています。16 バイトは必要ありません。

編集

実際には、次のようにパックする必要があると思います。

6.7.2.1

実装では、ビットフィールドを保持するのに十分な大きさのアドレス指定可能なストレージユニットを割り当てることができます。十分なスペースが残っている場合、構造内の別のビット フィールドの直後に続くビット フィールドは、同じユニットの隣接するビットにパックされます。

于 2012-08-13T09:52:01.673 に答える
6

Bitfields はビットをパックするため、20 ビットは 4 つの異なる int ではなく、32 ビットの int にうまく収まります。

于 2012-08-13T09:52:52.817 に答える