¿Qué significa 'temperatura sin firmar:3' en una estructura o unión? [duplicar]

Resuelto Munir Ahmed asked hace 14 años • 4 respuestas

Posible duplicado:
¿Qué significa este código C++?

Estoy intentando asignar una estructura C a Java usando JNA. Me encontré con algo que nunca había visto.

La structdefinición es la siguiente:

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;
};

Puedes ver que se define alguna variable unsigned op_attached:1y no estoy seguro de qué significaría eso. ¿Eso afectaría la cantidad de bytes que se asignarán para esta variable en particular?

Munir Ahmed avatar Jun 01 '10 20:06 Munir Ahmed
Aceptado

Esta construcción especifica la longitud en bits de cada campo.

La ventaja de esto es que puedes controlarlo sizeof(op), si tienes cuidado. el tamaño de la estructura será la suma de los tamaños de los campos internos.

En su caso, el tamaño de la operación es de 32 bits (es decir, sizeof(op)4).

El tamaño siempre se redondea al siguiente múltiplo de 8 para cada grupo de xxx:yy sin firmar; construir.

Eso significa:

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)

No estoy seguro de recordar esto correctamente, pero creo que lo hice bien.

utnapistim avatar Jun 01 '2010 14:06 utnapistim

Declara un campo de bits ; el número después de los dos puntos proporciona la longitud del campo en bits (es decir, cuántos bits se utilizan para representarlo).

James McNellis avatar Jun 01 '2010 13:06 James McNellis
unsigned op_type:9;

Significa que op_type es una variable entera con 9 bits.

goedson avatar Jun 01 '2010 13:06 goedson

El modificador de dos puntos en tipos integrales especifica cuántos bits debe ocupar el int.

plinth avatar Jun 01 '2010 13:06 plinth