Uniones y Rangos de Bits

Anuncio
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
Descargar