5

ビットフィールドのフィールド部分は、それらが構造体または共用体内のフィールドにしかできないことを示唆しているようです。

ビットフィールドは、次のように、ユニオンや構造体などの集約データ型の外側で、典型的な「スタンドアロン」変数にすることができます。

   int sum:6;   //Can this work as a declaration statement?
   sum=4;

そうでない場合は、なぜですか?ビットフィールドが基本的にメモリ使用量を減らすことを意図している場合、そのサイズを超えないことがわかっている変数をビットフィールドとして宣言できないのはなぜですか?

4

3 に答える 3

4

ビットフィールドは、C標準で許可されているため、構造体または共用体の一部にすぎません。別の方法で決定することも可能でした。委員会が標準をそのままの形で作成することにした理由については、委員会に尋ねなければなりません。

C99 標準で情報を検索するには、次のようにします。

目次から:

6.7 宣言

6.7.2 型指定子 (わかりました、これは少しあいまいです)

6.7.2.1 構造体と共用体の指定子。

1 つのビット フィールドはdeclarator_opt : constant-expression、構文の一部です。この構文はここでのみ許可されており、その結果、他の場所でビットフィールドを宣言することはできません。

構文は、この種の情報に興味がある場合は、オプションでビットフィールドの名前を省略できることを示しています。条項 6.7.2.1:3 はさらに進んで、長さ 0 のビット フィールドの名前を禁止しています。

于 2013-05-04T12:47:51.877 に答える
0

ビット フィールドは、名前で個別に参照できる構造体と共用体でのみ定義できます。メモリをビット単位でアドレス指定することはできません。最小バイト サイズ (8 ビット) が必要です。変数をビット単位でアドレス指定するには、次のようなマスクを使用できます。

int num = 9;
int fourthBit = (num >> 4) & 1;

構造体は、(4 バイトの) int などのより大きなサイズを持つことができ、ビットごとに異なる部分に分割できます。もちろん、割り当てはマスクを使用してコンパイルされます。

詳細については、http: //msdn.microsoft.com/en-us/library/yszfawxh (v=vs.80).aspx を参照してください。

于 2013-05-04T10:58:13.970 に答える