[C con Clase] Sobre el punto 'Tipos de variables I' del curso

Salvador Pozo salvador en conclase.net
Jue Mayo 3 11:03:23 CEST 2012


El pasado 2012-05-03 07:21:22, User escribió:
 
U> Otra duda,
U> Imaginemos que mis datos de entrada son siempre enteros con un rango de - 6
U> a 12, podría usar un char para tratar esta información, pero aun así creo
U> que no sería óptimo. Digo creo, porque un char ocupa un byte y creo que
U> sería lo mínimo que podemos usar.
U> Como en C++ no hay ningún tipo de dato que vaya desde - 6 a 12, ¿podría
U> crear uno con ese rango de valores?
U> He pensado en algo como esto, pero no se si valdría para realizar
U> operaciones matemáticas:
U> enum entero_reducido {menos_6=-6, menos_5, menos_4, menos_3, menos_2,
U> menos_1, cero, uno_positivo, dos_positivo, tres_positivo, cuatro_positivo,
U> cinco_positivo, seis_positivo, siete_positivo, ocho_positivo,
U> nueve_positivo, diez_positivo, once_positivo, doce_positivo};

Hola:
Esta solución tiene al menos un inconveniente, que los valores enum se condifican usando int. Es decir, has diseñado un tipo que sólo admite 19 valores, pero internamente, cada objeto de este tipo ocupa la misma memoria que un int.

El tipo más compacto en cuanto a espacio de memoria usado es siempre char.

Otra solución, para optimizar espacio, es empaquetar valores en bits. Por ejemplo, tu tipo tiene 19 valores posibles, es decir, que precisa al menos cuatro bits. Esto significa que puedes almacenar dos valores "entero_reducido" en un byte, cuatro en un short int, etc.

Esto tiene el inconveniente de que complica mucho el tratamiento, los cálculos, la captura de datos y su visualización, de modo que, a no ser que el espacio sea un problema realmente crítico, no suele valer la pena trabajar con bits sueltos.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase