可能な重複:
structフィールドの後の ‘:number'はどういう意味ですか?
「unsigned temp:3」の意味
私はこの種の質問をするのが嫌いですが、それは本当に私を悩ませているので、私は尋ねます:
以下のコードの:演算子の機能は何ですか?
#include <stdio.h>
struct microFields
{
unsigned int addr:9;
unsigned int cond:2;
unsigned int wr:1;
unsigned int rd:1;
unsigned int mar:1;
unsigned int ALU:3;
unsigned int b:5;
unsigned int a:5;
unsigned int c:5;
};
union micro
{
unsigned int microCode;
microFields code;
};
int main(int argc, char* argv[])
{
micro test;
return 0;
}
誰かが気になっている場合は、このコードを以下のリンクからプルしました: http://www.cplusplus.com/forum/beginner/15843/
どこかでこれまでに見たことがあり、また見たときに理解したいので、本当に知りたいです。
それらはビットフィールドであり、その例はunsigned int addr:9;
は、9ビット長のaddr
フィールドを作成します。
多くの値を整数型にパックするためによく使用されます。あなたの特定のケースでは、(おそらく)仮想CPUの32ビットマイクロコード命令の構造を定義します(すべてのビットフィールド長を合計すると、合計は32になります)。
ユニオンを使用すると、単一の32ビット値をロードしてから、次のようなコードで個々のフィールドにアクセスできます(マイナーな問題も修正され、特にcode
およびtest
の宣言)。
#include <stdio.h>
struct microFields {
unsigned int addr:9;
unsigned int cond:2;
unsigned int wr:1;
unsigned int rd:1;
unsigned int mar:1;
unsigned int ALU:3;
unsigned int b:5;
unsigned int a:5;
unsigned int c:5;
};
union micro {
unsigned int microCode;
struct microFields code;
};
int main (void) {
int myAlu;
union micro test;
test.microCode = 0x0001c000;
myAlu = test.code.ALU;
printf("%d\n",myAlu);
return 0;
}
これは、ALU
ビットフィールドを構成する3ビットである7を出力します。
ビットフィールド です。コロンの後の数字は、各変数が占めるビット数です。
これは、変数のビット数を指定する宣言子です。
詳細については、以下を参照してください。
http://msdn.Microsoft.com/en-us/library/yszfawxh(VS.80).aspx