コンテンツにスキップ

ビットフィールド

構造体のデータメンバはバイト単位でサイズが確保されますが、ビット単位でもサイズを確保することができます。 そのようなデータメンバをビットフィールドといいます。

struct Bits {
    uint8_t a : 1;     //  1 ビット
    uint8_t b : 3;     //  3 ビット
    uint8_t c : 4;     //  4 ビット
};

データメンバ a, b, cuint8_t 型の領域をそれぞれ指定したビット数で分割して利用します。 構造体のサイズをなるべく小さく抑えたいときなどに使用されます。

例えば 1 ビットのビットフィールドを用意すれば 0, 1 の 2 値を表現できるため、 bool の代わりとして使用することができます。

struct Bool {
    uint8_t flag : 1;
};

ただし上記のような 1 ビットのビットフィールドを定義しても Bool のサイズは uint8_t 分のサイズを確保します。 すなわち uint8_t の残り 7 ビットは未使用な領域になります。