スポンサーリンク

ビットフィールドを構造体で表現

構造体でビットフィールドを管理できます。
例えば、下記は、1ビット単位で4つのフィールドを定義しました。

共用体で、下記のように定義することで、ビットフィールドで定義した値を、unsigned intの単位で参照できます。

例えば、下記のようにビットフィールド単位で値を代入して、

unsigned intの単位で参照します。これが共用体の効果ですね。

スポンサーリンク

サンプルコード

下記がサンプルコードになります。

下記が実行結果になります。

スポンサーリンク

warning: implicit truncation from 'int' to bit-field changes value from 2 to 0

定義したビットフィールドのビット幅を超えて、値を代入すると、
warningがでます。

例えば、ビット幅を1で定義しているところに、

ビット幅1を超えて、値を代入すると、

下記のような、warningがでます。

メモリサイズとアライメント

ビットフィールドで定義された構造体のメモリサイズは、アライメントされてメモリサイズとなります。
例えば、下記の場合は4バイトのint型なので、下記のように31ビットで定義しても、メモリサイズは4バイトになります。

下記のように、33ビットとすると、4バイトアライメントなので、メモリサイズは8バイトになりますね。

スポンサーリンク