Light C | ← → 目次 索引 |
構造体のメンバをビット単位で指定して、領域を節約することができます。
struct tag { | ||
short a:3; | // 3 ビットのフィールド | |
short b:4; | // 4 ビットのフィールド | |
short c:5; | // 5 ビットのフィールド | |
short d:6; | // 6 ビットのフィールド | |
}; |
各メンバの型には int、short、char を指定します (ただし、ISO/JIS/ANSI で規定されているデータ型は int のみ)。signed または unsigned を付加することもできますが、その指定にかかわりなく、Light C のビット フィールドは、常に符号なし型として扱われます。
Light C では、各ビット フィールドは下位ビットから詰め込まれます。
上の例では、a、b、c の 3 つのビット フィールドが short の 16 ビット中の下位 12 ビットに詰め込まれ、a が最下位、c が最上位に置かれます。4 番目の d は同じ 16 ビットには収まらないため、次の short に格納されます。この結果、フィールドは次のように配置されます。
変数 | bit15 ← ... → bit0 |
---|---|
第 1 の short | ????cccc cbbbbaaa |
第 2 の short | ???????? ??dddddd |
ビット フィールドは、通常の整数と同じように、加減乗除やビット演算に使用できます。ただし、& 演算子でアドレスを取得したり、sizeof 演算子でサイズを取得することはできません。
通常のメンバと同じように、ビット フィールドも値リストで初期化できます。
struct { | |
char a:3; | |
char b:1; | |
} s = { 3, 1 }; |
Copyright © Tama Software Ltd, 1999-2012. | ← → 目次 索引 |