28

重複の可能性
::1、:7、:16、:32など、構造体宣言のコロンはどういう意味ですか?

参考ページのCコードサンプルです。

      signed int _exponent:8;

「8」と「8」自体の前のコロンの意味は何ですか?

4

4 に答える 4

32

それはビットフィールドです。structこれは定義でのみ有効であり、システムが整数に8ビットのみを使用することを意味します。

于 2010-10-21T02:55:52.190 に答える
18

これはビットフィールドであり、構造のあいまいで見当違いの機能です。他の人のコードのビットフィールドを処理するために知っておく必要のある情報を検索するには、これで十分です。独自のコードについては、ビットフィールドを使用しないでください。

編集: Zackが要求したように、ビットフィールドには、独自のビット演算を実行する場合に比べて重大な欠点があり、利点はありません。それらのいくつかを次に示します。

  • 一度にコピー、比較、シリアル化、または逆シリアル化できるのは1つのビットフィールド要素のみです。独自のビット演算を行うことで、一度に単語全体を操作できます。
  • ビットフィールド要素へのポインタを持つことはできません。独自のビット演算を使用すると、大きい方の単語へのポインタと、単語内のビットインデックスを「ポインタ」として使用できます。
  • 固定サイズの型を使用し、エンディアンを知っている限り、C構造体をディスクまたはネットワークに直接読み書きすることは、ビットフィールドなしで中途半端に移植可能です。ただし、ビットフィールドをスローすると、より大きなタイプ内の要素の順序、および使用される合計スペースと配置は、特定のCPUアーキテクチャ内であっても、実装に大きく依存するようになります。
  • C仕様には、ビットフィールド要素の符号が予想とは異なることを許可するよりも非常に奇妙な規則があり、これらを認識している人はほとんどいません。

シングルビットフラグの場合、ビットフィールドの代わりに独自のビット演算を使用するのは非常に簡単です。パックする必要のある大きな値の場合、すべてのビット演算をあちこちに書き出すのが面倒な場合は、いくつかの単純なマクロを記述します。

于 2010-10-21T02:58:36.827 に答える
4

ビットフィールド仕様です。

これは、通常はビット以上を使用するビット_exponentのみを取得することを意味します。通常、ビットフィールドは符号なしタイプで使用されます。8signed int8

IIRC、コンパイラは、8ビットに収まらないものがに書き込まれた場合に警告し_exponentます。

于 2010-10-21T02:59:22.033 に答える
2

そのステートメントが構造内にある場合、はビットフィールドを意味します。

于 2010-10-21T02:56:37.020 に答える