11-5. ビットフィールド
◇ビットフィールド
1.ビットフィールドとは?
構造体では、変数のデータ領域をビット単位で割り当てることができます。
その構造体のメンバにビット単位で変数を定義する機能をビットフィールドといいます。
2.定義・宣言
struct st_test{
unsigned int var1:1; /* var1は1ビット */
unsigned int var2:3; /* var2は3ビット */
unsigned int var3:4; /* var3は4ビット */
}s1;
ビットフィールドに使える型は整数型の
int
unsigned int
signed int
の3つに限定されます。
メモリマップ(これはあくまでイメージなので実際とは異なると思います。)
s1
+-+-+-+-+-+-+-+-+
| | var2| var3 |
+-+-+-+-+-+-+-+-+
|
var1
このようにビット単位で変数を定義することにより無駄なメモリを使わないですみます。
それだけでなく、値の範囲の制限にも使えるので、使い方によっては便利だと思います。
s1.var1 0~1
s1.var2 0~7
s1.var3 0~15
3.演算
代入や演算はこれまでどおり行うことが出来ます。
ただし、定義したビットを超える値を代入した場合、
どうなるかは保証できません。
そういうわけで、数値を代入するときはビット範囲内であるかどうか確認する必要があります。
例
s1.var1 = 2;
この場合、s1.var1は0と1しか正確に代入できないのでこの式によって代入
された値の保証はできない。