2011-11-06 16 views
6
struct x 
{ 
    char a : 1; // statement 1 
    char c : 3; // statement 2 
}; 

この構造の場合、サイズはどうなりますか?ステートメント1と2の意味は何ですか?指定された構造のサイズ

+5

これらはステートメントではなく、ビットフィールド宣言です。 –

答えて

10

これらのステートメントは、ビットフィールドを宣言します。
a1ビットのメモリを占め、c3ビットのメモリを占有していることを意味します。

構造体のサイズは次のようになります。
Atleastの4ビット

、最も可能性が高いが、それはなります +パディング(ビット)8 bitsすなわち:1 byte


シリーズの場合は、ので、ビットフィールドはintのサイズまで加算されません。パディングが起こります。パッディングの量は、構造体のメンバのアラインメント特性によって決まります。

ビットフィールドとは何ですか?
From IBM documentation:

CとC++の両方が整数メンバーがコンパイラは、通常可能にするであろうよりも小さなメモリ空間に格納されることを可能にします。これらの省スペース構造体はビットフィールドと呼ばれ、そのビット幅は明示的に宣言できます。ビットフィールドは、固定ハードウェア表現に対応するようにデータ構造を強制しなければならないプログラムで使用され、移植可能ではありません。次のようにビットフィールドを宣言するため

構文は:

>> - type_specifier - + ------------ + - : - constant_expression - ; - - > < '-declarator-'

ビットフィールド宣言には、オプションの宣言子、コロン、ビット単位のフィールド幅を示す定数整数式、およびセミコロンが続きます。ビットフィールド宣言は、型修飾子、constまたはvolatileのいずれも使用できません。

関連する問題