Hola a todos, tengo un inconveniente a la hora de intentar entender el siguiente código
#include <stdio.h>
typedef union
{
int entero;
struct
{
unsigned short : 7;
unsigned short valor: 1;
} bin;
} conversor;
int main(void)
{
int numero = 8, i;
conversor conver;
conver.entero = numero;
for ( i = 0; i < 8; i++ )
{
printf( "%d", conver.bin.valor );
conver.entero <<= 1;
}
printf( "\n" );
return 0;
}
Seria alguien tan amable de explicarme como convierte este código un numero entero a binario y también que hace cada miembro de la unión por ejemplo
unsigned short : 7;
Para que sirve esto?
Suponiendo que int es de 4 bytes y short es 2 conversor tendría el siguiente aspecto :
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // <- conversor union
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // <- int entero
XXXXXXXXXXXXXXXX // <- struct bin
XXXXXXX // <- campo sin nombre
X // <- valor
Su código establece entero a 8, que se verá así :
00000000000000000000000000001000
Luego se imprime el valor contenido en conver.bin.valor el cual mostrara el octavo bit que es cero, seguidamente desplazamos entero un bit a la izquierda resultando
00000000000000000000000000010000
Este proceso se repetirá 8 veces, pero cuando i sea igual a tres valor se establecerá a uno, en ese momento ocho sera desplazado cuatro posiciones a la izquierda dando lugar a 128 que en binario es 10000000
Como seguramente ya te has dado cuenta, el campo de bits sin nombre (unsigned short : 7;) sirve como 7 bits de relleno, de manera que a valor le corresponda el octavo bit
Un Saludo
Hola Blaster ;-) excelente explicación la tuya de verdad muchas gracias por tomarte el tiempo en explicar en detalle
Saludos