elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Convertir entero a binario con uniones y campos de bit
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Convertir entero a binario con uniones y campos de bit  (Leído 2,755 veces)
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Convertir entero a binario con uniones y campos de bit
« en: 11 Abril 2015, 23:57 pm »

Hola a todos, tengo un inconveniente a la hora de intentar entender el siguiente código

Código
  1. #include <stdio.h>
  2.  
  3. typedef union
  4. {
  5.    int entero;
  6.    struct
  7.    {
  8.        unsigned short : 7;
  9.        unsigned short valor: 1;
  10.    } bin;
  11. } conversor;
  12.  
  13. int main(void)
  14. {
  15.    int numero = 8, i;
  16.    conversor conver;
  17.    conver.entero = numero;
  18.  
  19.    for ( i = 0; i < 8; i++ )
  20.    {
  21.        printf( "%d", conver.bin.valor );
  22.        conver.entero <<= 1;
  23.    }
  24.    printf( "\n" );
  25.  
  26.    return 0;
  27. }
  28.  

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

Código
  1. unsigned short : 7;

Para que sirve esto?


En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Convertir entero a binario con uniones y campos de bit
« Respuesta #1 en: 12 Abril 2015, 05:27 am »

Suponiendo que int es de 4 bytes y short es 2 conversor tendría el siguiente aspecto :

Código
  1. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // <- conversor union
  2. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // <- int entero
  3.                XXXXXXXXXXXXXXXX // <- struct bin
  4.                         XXXXXXX // <- campo sin nombre
  5.                        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



En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Convertir entero a binario con uniones y campos de bit
« Respuesta #2 en: 14 Abril 2015, 01:50 am »

Hola Blaster  ;-) excelente explicación la tuya de verdad muchas gracias por tomarte el tiempo en explicar en detalle

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[c++] Problema con programa de Entero a Binario
Programación C/C++
audiogalaxy. 2 3,251 Último mensaje 9 Septiembre 2013, 08:22 am
por eferion
Ayuda codigo convertir numero entero a string « 1 2 »
Programación C/C++
NanoTech 15 7,236 Último mensaje 7 Abril 2014, 22:42 pm
por NanoTech
Convertir std::string a valor entero? « 1 2 »
Programación C/C++
t4r0x 10 7,900 Último mensaje 6 Abril 2014, 08:46 am
por t4r0x
Cómo convertir binarios en un entero del lenguaje C de programación
Programación C/C++
El_Andaluz 4 5,858 Último mensaje 3 Junio 2016, 14:55 pm
por AlbertoBSD
convertir entero picaxe
Electrónica
br7 4 4,328 Último mensaje 13 Marzo 2018, 03:48 am
por br7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines