62

重複の可能性:
この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、それが何を意味するのかわかりません。これは、この特定の変数に割り当てられるバイト数に影響しますか?

4

4 に答える 4

44

この構成は、各フィールドの長さをビット単位で指定します。

これの利点は、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)

これを正しく覚えているかどうかはわかりませんが、正しく理解できたと思います。

于 2010-06-01T14:43:51.110 に答える
19

ビットフィールドを宣言します; コロンの後の数字は、フィールドの長さをビット単位で示します(つまり、フィールドを表すために使用されるビット数)。

于 2010-06-01T13:17:51.903 に答える
6
unsigned op_type:9;

op_typeは、9ビットの整数変数であることを意味します。

于 2010-06-01T13:18:24.537 に答える
4

整数型のコロン修飾子は、intが占めるビット数を指定します。

于 2010-06-01T13:17:53.467 に答える