[解決済み] C 言語の構造体における ":" (コロン) - その意味は? 重複] [重複] [重複
質問
struct _USBCHECK_FLAGS
{
unsigned char DEVICE_DEFAULT_STATE : 1;
unsigned char DEVICE_ADDRESS_STATE : 1;
unsigned char DEVICE_CONFIGURATION_STATE : 1;
unsigned char DEVICE_INTERFACE_STATE : 1;
unsigned char FOUR_RESERVED_BITS : 8;
unsigned char RESET_BITS : 8;
} State_bits;
は何をするのか
:1
と
:8
の意味は?
どのように解決するのですか?
これらはビットフィールドです。基本的には、コロンの後の数字が、そのフィールドが何ビット使っているかを表しています。以下は からの引用です。 からの引用です。
定数式は、フィールドの幅をビット単位で指定します。宣言子の 宣言子の型指定子はunsigned int、signed int、またはintでなければなりません。 intでなければならず、定数式は非負の整数値でなければなりません。 値が0である場合、宣言は宣言子を持ちません。ビットフィールドの配列 の配列、ビットフィールドへのポインタ、およびビットフィールドを返す関数は使用できません。 は許されません。オプションの宣言子は、ビットフィールドの名前を指定します。ビットフィールド は、構造体の一部としてのみ宣言することができます。ビットフィールドにAddress-of演算子 (&) は、ビットフィールドの構成要素には適用できません。
無名のビットフィールドは参照できず、実行時の内容は予測不可能です。 は予測不可能です。それらは、整列のために、"ダミー"フィールドとして使用することができます。 として使用することができます。幅が0と指定された無名ビットフィールドは、その後に続くメンバのストレージを保証します。 でそれに続くメンバの格納が保証されます。 struct-declaration-listのそれに続くメンバーのストレージがint境界で始まることを保証します。
この例では、screenという名前の構造体の2次元配列を定義しています。
struct
{
unsigned short icon : 8;
unsigned short color : 4;
unsigned short underline : 1;
unsigned short blink : 1;
} screen[25][80];
編集: MSDN のリンクからもう一つ重要なことを。
ビットフィールドはinteger型と同じセマンティクスを持ちます。つまり と同じように式で使用されます。 と全く同じ方法で使用されます。 と同じように使われます。
簡単なサンプルで、これをうまく説明しています。興味深いことに、型が混在している場合、コンパイラはデフォルトで
sizeof (int)
.
struct
{
int a : 4;
int b : 13;
int c : 1;
} test1;
struct
{
short a : 4;
short b : 3;
} test2;
struct
{
char a : 4;
char b : 3;
} test3;
struct
{
char a : 4;
short b : 3;
} test4;
printf("test1: %d\ntest2: %d\ntest3: %d\ntest4: %d\n", sizeof(test1), sizeof(test2), sizeof(test3), sizeof(test4));
test1: 4
テスト2: 2
テスト3: 1
テスト4: 4
関連
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】Enterキーを押して続行する
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー