<STEP1>
普段、数字をint型で扱っていますね。
int型は、今回の環境では32ビット(=4バイト)ありますので、2^32通り=(約40億通り)の数を表すことができます。
しかし、そんなに大きな値を使ってきましたか…?
例えば、日付を格納するための変数「day」を宣言する場合、
日付は1日〜31日までの31種類で表せますので、
31< 2^5(32) ですから、5ビットあれば表すことができます。
つまり、先頭の27ビットを無駄に消費しています。
この消費量を減らすための工夫が、ビットフィールドです。
ビットフィールドは、構造体や共用体の中で宣言します。
日付を格納する「day」には負の数を代入する必要はありませんので、明示的にunsigned intで宣言し、
unsigned int day; //通常このように定義
↓
unsigned int day :5 ; //5ビットでオッケーなので、「:5(コロン5)」をつけて宣言
このように宣言します。
【演習1】
以下の変数を宣言する場合、何ビットあればよいでしょうか。
①月を格納する変数「month」
②ユーザの生まれ年を格納する変数「b_year」
③今年までの西暦を格納する変数「year」※BC(Before Crist)は含まない
④時を格納する変数「hour」
⑤分を格納する変数「minute」
⑥性別を格納する変数「gender」
【演習2】
演習1の①〜⑥までの変数を、実際に構造体の中に宣言してください。構造体名は、b_field_onです。
ビットフィールドを設定していない構造体b_field_offも宣言し、構造体のバイト数を比較しなさい。