可能性のある複製:
このC++コードはどういう意味ですか?
JNAを使用してC構造体をJavaにマップしようとしています。見たことのないものに出くわしました。
struct
の定義は次のとおりです。
struct op
{
unsigned op_type:9; //---> what does this mean?
unsigned op_opt:1;
unsigned op_latefree:1;
unsigned op_latefreed:1;
unsigned op_attached:1;
unsigned op_spare:3;
U8 op_flags;
U8 op_private;
};
unsigned op_attached:1
のように定義されている変数がいくつかありますが、それが何を意味するのかわかりません。これは、この特定の変数に割り当てられるバイト数に影響しますか?
この構成では、各フィールドの長さをビット単位で指定します。
これの利点は、注意してsizeof(op)
を制御できることです。構造体のサイズは、内部のフィールドのサイズの合計になります。
あなたの場合、opのサイズは32ビットです(つまり、sizeof(op)
は4です)。
サイズは常に、署名されていないxxx:yyのグループごとに、次の8の倍数に切り上げられます。構築します。
つまり:
struct A
{
unsigned a: 4; // 4 bits
unsigned b: 4; // +4 bits, same group, (4+4 is rounded to 8 bits)
unsigned char c; // +8 bits
};
// sizeof(A) = 2 (16 bits)
struct B
{
unsigned a: 4; // 4 bits
unsigned b: 1; // +1 bit, same group, (4+1 is rounded to 8 bits)
unsigned char c; // +8 bits
unsigned d: 7; // + 7 bits
};
// sizeof(B) = 3 (4+1 rounded to 8 + 8 + 7 = 23, rounded to 24)
これを正しく覚えているかどうかはわかりませんが、私は正しく理解したと思います。
ビットフィールド を宣言します。コロンの後の数は、フィールドの長さをビット単位で示します(つまり、フィールドを表すために使用されるビット数)。
unsigned op_type:9;
つまり、op_typeは9ビットの整変数です。
整数型のコロン修飾子は、intが占めるビット数を指定します。