Ответ 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)
Я не уверен, что правильно это помню, но я думаю, что все правильно.