Algoritmos y Lenguaje de Programación, Sección 1 Unión Uniones y Rangos de Bits Mario Medina C. [email protected] • Similar en formato a estructuras • Colección de datos de tipos diferentes )Todos los miembros de una unión hacen referencia a la misma posición de memoria )Utilizada para almacenar datos de diferente tipo en una misma ubicación de memoria Ejemplo Ejemplo • Supongamos que float e int tienen largo 32 bits • 2 formas de acceder a los mismos 32 bits de memoria union { float f; int i; } fi; )Ambos miembros ocupan la misma memoria! Ejemplo struct in_addr { union { struct { char s_b1, s_b2, s_b3, s_b4; } S_un_b; struct { short s_w1, s_w2; } S_un_w; long S_addr; } } S_un; ©Mario Medina C. Ejemplo • Tres formas de acceder a la misma memoria (32 bits) s_b4 s_b3 s_b2 s_w2 s_b1 s_w1 S_addr 1 Algoritmos y Lenguaje de Programación, Sección 1 Tamaño de la unión Inicialización de uniones • Tamaño de su mayor miembro • Valor de inicialización debe concordar con tipo del primer miembro union { long li; short si; } longAndShort; )Tiene tamaño de long int Uso de Uniones • Similar a estructuras )Nombre.miembro )Para punteros, puntero->miembro Rangos de Bits union floatInt { float f; int i; }; floatInt fi; floatInt *fip; fi.f = 10.0; fip = &fi; fip->i = 95; Ejemplo struct Ejemplo { unsigned ch: 7; unsigned font: 6; unsigned size: 19; }; struct Ejemplo palabra; )Define almacenamiento en 32 bits ` Miembros actúan como enteros pequeños ©Mario Medina C. union { int a; float b; char c[4]; } x = { 5 }; • Similar a estructura )Sus miembros son rangos de bits )Todos los rangos se almacenan en una o más variables enteras )Operación varía con implementación ` Rango es signed o unsigned ` Tamaño del tipo int ` Bits se asignan de izquierda a derecha ó derecha a izquierda Ejemplo )Dos formas de almacenar las tres variables en 32 bits ` Dependiente de implementación size font 6 bits 19 bits ch 7 bits font 6 bits ch 7 bits size 19 bits 2 Algoritmos y Lenguaje de Programación, Sección 1 Uso de Rangos de Bits Ventajas • Usados para compactar datos • Facilita escritura de código compacto • Almacenamiento compacto de datos )Sólo pueden declararse como enteros • Referencia a campos usa sintaxis de estructuras palabra->font = 10; palabra->ch = 1; )Relevante si memoria es escasa • Acceso conveniente a partes de un entero )Reemplaza muchas operaciones de corrimiento y enmascarado de bits • No tienen dirección asociada )No permiten operador & ©Mario Medina C. 3