Что означает' unsigned temp:3 ' в структуре или объединении? [дубликат]


Возможные Дубликаты:
что означает этот код C++?

Я пытаюсь сопоставить структуру C Java с помощью JNA. Я наткнулся на то, чего никогда не видел.

The 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 54

4 ответа:

эта конструкция определяет длину в битах для каждого поля.

преимущество этого заключается в том, что вы можете контролировать sizeof(op), Если вы не будете осторожны. размер структуры будет суммой размеров полей внутри.

в вашем случае размер op составляет 32 бита (то есть,sizeof(op) в 4).

размер всегда округляется до следующего кратного 8 для каждой группы без знака xxx: yy; construct.

что значит:

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.