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