今回は、ビットフィールドについて説明していきます。
/* ビットフィールドを宣言 */
struct bit{
unsigned int b1 : 1;
unsigned int b2 : 2;
unsigned int b3 : 3;
unsigned int b4 : 4;
unsigned int b5 : 5;
};
通常はバイト単位でしか変数を使えませんが、
これをビット単位で処理可能にする機能がビットフィールドです。
キーワードは、構造体と同じく struct を使います。
記述法は、変数名の後に、コロンで区切って確保するビット数を指定します。
確保される領域は、データ型の大きさによって変わります。
また、プログラム内での使い方は、構造体と同じです。
今度は、変数名が無名になっている場合です。
/* ビットフィールドを宣言 */
struct bit{
unsigned int b1 : 1;
unsigned int b2 : 2;
unsigned int : 0;
unsigned int b4 : 4;
unsigned int b5 : 5;
unsigned int : 1;
unsigned int b7 : 7;
};
変数名が無名で、ビット幅が0となっている場合、
ここで、一旦、メモリ確保を区切ります。と言う意味になります。
内部処理的な問題なので、あまり気にしなくても問題ありません。
次に変数名が無名で、ビット幅が0以外 となっている場合ですが、
これはそのままの意味で、指定されたビット数は確保しますが、
アクセス不能です。
主に、プログラムの元となる仕様によって、
ビットの並びを揃えたい場合などに用いられます。
また、ビットフィールドは構造体機能の一部なので、
構造体の中には、
普通の変数とビットフィールドを混ぜて宣言してもOKです。