C++ のビット フィールド
クラスと構造体は整数型よりもストレージを使用してメンバーを含めることができます。これらのメンバーがビット フィールドとして指定されます。ビット フィールド メンバー宣言の 構文を示します :
declarator : constant-expression
解説
(省略可能) declaratorメンバーはプログラムでアクセス名前です。これは整数型である必要があります (列挙型を含む)。 定数式は メンバーが構造体で使用できるビット数を指定します。匿名はフィールドに " - 識別子のないつまりビット フィールドのメンバー) を使用できます。かみました。
[!メモ]
type がメンバーの型である type の境界に次のビット フィールドの幅 0 での配置のないビット フィールド。
次の例ではビット フィールドを含む構造体を宣言します :
// bit_fields1.cpp
// compile with: /LD
struct Date {
unsigned short nWeekDay : 3; // 0..7 (3 bits)
unsigned short nMonthDay : 6; // 0..31 (6 bits)
unsigned short nMonth : 5; // 0..12 (5 bits)
unsigned short nYear : 8; // 0..100 (8 bits)
};
型 Date のオブジェクトの概念的なメモリ レイアウトは次の図に示します。
Date オブジェクトのメモリ レイアウト
unsigned short ことに nYear で最大 8 ビット ワード境界をオーバーフローするの型宣言に注意してください。したがって新しい unsigned short の先頭から始まります。必要と基になる型の 1 個のオブジェクトに適用可能なすべてのビット フィールドではありません ; ストレージの新しい単位は宣言で要求されたビット数だけしたがって割り当てられます。
Microsoft 固有の仕様 →
ビット フィールドとして宣言されたデータの手順は上の図に示すようにから上位ビットはです。
終了 Microsoft 固有の仕様→
構造体の宣言を次の例に示すように含まれている場合長さ 0 のフィールドの名前
// bit_fields2.cpp
// compile with: /LD
struct Date {
unsigned nWeekDay : 3; // 0..7 (3 bits)
unsigned nMonthDay : 6; // 0..31 (6 bits)
unsigned : 0; // Force alignment to next boundary.
unsigned nMonth : 5; // 0..12 (5 bits)
unsigned nYear : 8; // 0..100 (8 bits)
};
メモリ レイアウトは次の図のようになります。
長さのビット フィールドを使用してDate オブジェクトのレイアウト
ビット フィールドの基になる型は 基本型 に説明されているように整数型である必要があります。