|
タイトルの件、大抵の入門書は構造体と共有体はまず間違いなく載っていると思う。
では、以下のような構造体定義はご存知でしょうか?
struct DataStruct{
unsinged int flagA:1;
unsinged int patternB:2;
}
構造体のフィールド名の後ろにコロンをつけて、その後に数値が書かれています。
これは、ビットフィールドと言います。
構造体のメンバ変数のサイズをBit単位で指定する方法です。
上記の構造体でしたらflagAは1Bitで表せる範囲の0〜1の値をとり、PatternBは2Bitで表せる0〜3の値をとります。
この方法により、変数がとりうる値を制限することが出来ますのでフラグなどを格納する際に利用できます。
また、ビットサイズでデータの内容を指定したいケースとしては通信などのストリーム変換にも使えるでしょう。
ただ、この記述を実際に利用するケースは少なく殆どはビット演算やストリームに対応させた変換で行われます。
便利に使えそうなケースとしてはBCD(2進化10進数)なんかを共用体と組み合わせると便利かもしれません。
union BCDData{
unsigned char data;
struct BCDVal{
unsigned char val1:4;
unsigned char val2:4;
}
}
めったにお目にかかることは無いでしょうが、この定義に出くわしたら面食らってしまうので頭の片隅に置いておきましょう(笑)
また、万が一出くわしたらストリームなどのようにデータサイズを想定した利用をしているケースもありますので気をつけましょう。
|

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- ソフトウェア





