Подтвердить что ты не робот

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

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

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

Определение 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, и я не уверен, что бы это значило. Будет ли это влиять на количество байтов, которые будут выделены для этой конкретной переменной?

4b9b3361

Ответ 1

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

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

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

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

Это означает:

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)

Я не уверен, что правильно это помню, но я думаю, что все правильно.

Ответ 3

unsigned op_type:9;

Обозначает op_type - целочисленная переменная с 9 бит.

Ответ 4

Модификатор двоеточия в интегральных типах определяет, сколько бит должно занимать int.