que - Uso del operador: en C
prioridad de operadores en c (3)
Posibles duplicados:
¿Qué significa '': número'' después de un campo de estructura?
¿Qué significa ''unsigned temp: 3''?
Hola a todos, odio hacer este tipo de pregunta, pero realmente me está molestando, así que preguntaré:
¿Cuál es la función del operador: en el código de abajo?
#include <stdio.h>
struct microFields
{
unsigned int addr:9;
unsigned int cond:2;
unsigned int wr:1;
unsigned int rd:1;
unsigned int mar:1;
unsigned int alu:3;
unsigned int b:5;
unsigned int a:5;
unsigned int c:5;
};
union micro
{
unsigned int microCode;
microFields code;
};
int main(int argc, char* argv[])
{
micro test;
return 0;
}
Si a alguien le importa, extraje este código del siguiente enlace: http://www.cplusplus.com/forum/beginner/15843/
Realmente me gustaría saber porque sé que he visto esto antes en algún lugar, y quiero entenderlo para cuando lo vuelva a ver.
¡Gracias!
Es un campo de bits . El número después de los dos puntos es la cantidad de bits que ocupa cada variable.
Ese es un declarador que especifica el número de bits para la variable.
Para más información, ver:
http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx
Son campos de bits, un ejemplo es que unsigned int addr:9;
crea un campo addr
9 bits de longitud.
Se usa comúnmente para empaquetar muchos valores en un tipo integral. En su caso particular, es la definición de la estructura de una instrucción de microcódigo de 32 bits para una (posiblemente) CPU hipotética (si suma todas las longitudes de campo de bits, suman 32).
La unión le permite cargar en un solo valor de 32 bits y luego acceder a los campos individuales con código como (problemas menores solucionados también, específicamente las declaraciones de code
y test
):
#include <stdio.h>
struct microFields {
unsigned int addr:9;
unsigned int cond:2;
unsigned int wr:1;
unsigned int rd:1;
unsigned int mar:1;
unsigned int alu:3;
unsigned int b:5;
unsigned int a:5;
unsigned int c:5;
};
union micro {
unsigned int microCode;
struct microFields code;
};
int main (void) {
int myAlu;
union micro test;
test.microCode = 0x0001c000;
myAlu = test.code.alu;
printf("%d/n",myAlu);
return 0;
}
Esto imprime 7, que son los tres bits que forman el campo de bits de alu
.