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