Estructura y Union en C

Ya hemos visto por encima lo interesante que puede ser trabajar con estructuras en C, ahora vamos a ver lo que es una UNION en C. Una UNION en base es como una estructura, solo que en una estructura los componentes de la misma se almacenan en diferente región de memoria, y en una UNION los componentes comparten la misma porción de memoria. Por lo tanto en una UNION nunca vamos a poder a acceder a sus componentes a la misma vez, modificar un componente modificará el valor del otro, a veces a valores impredecibles. Mejor verlo en un ejemplo:

#include <stdio.h>

/* un campo de bits que se va a codificar */
struct byte {
        int a : 1;
        int b : 1;
        int c : 1;
        int d : 1;
        int e : 1;
        int f : 1;
        int g : 1;
        int h : 1;
};

union bits {
        char car; // Un byte contiene 8 bits
        struct byte bit; // Los 8 bits que corresponden a la letra pulsada
} ascii;

void decodificar (union bits b);

void main()
{
        do {
                ascii.car = getchar();
                printf(": ");
                decodificar(ascii);
                printf("\n");
        } while (ascii.car!='s'); /*salimos si se pulsa una s */
}

/* Muestra la trama de bits para cada carácter. */
void decodificar(union bits b)
{
        if (b.bit.h) printf ("1 ");
        else printf("0 ");
        if (b.bit.g) printf ("1 ");
        else printf("0 ");
        if (b.bit.f) printf ("1 ");
        else printf("0 ");
        if (b.bit.e) printf ("1 ");
        else printf("0 ");
        if (b.bit.d) printf ("1 ");
        else printf("0 ");
        if (b.bit.c) printf ("1 ");
        else printf("0 ");
        if (b.bit.b) printf ("1 ");
        else printf("0 ");
        if (b.bit.a) printf ("1 ");
        else printf("0 ");
}

Descarga: CÓDIGO FUENTE

Pues bien, compilar el código y cuando lo ejecuteis poner vuestro nombre, y averiguareís como sería en binario jejejeje, el mio es:

0 1 0 0 0 1 0 1 --> E
0 1 1 0 0 1 0 0 --> d
0 1 1 1 0 1 0 1 --> u
0 1 1 0 0 0 0 1 --> a
0 1 1 1 0 0 1 0 --> r
0 1 1 0 0 1 0 0 --> d
0 1 1 0 1 1 1 1 --> o

Un saludo !!

Esta entrada fue publicada en Código C y etiquetada , , , , , , , , , , , , , , , , , , . Guarda el enlace permanente.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.