Что означает' 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 ответа:
эта конструкция определяет длину в битах для каждого поля.
преимущество этого заключается в том, что вы можете контролировать
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)
Я не уверен, что я помню это правильно, но я думаю, что я получил это право.
он объявляет битовое поле; число после двоеточия дает длину поля в битах (т. е., сколько битов используется для его представления).