[C con Clase] Curso C++ de C con clase. Capítulo 11: Tipos de variables III: Estructuras.
Steven R. Davidson
vze266ft en verizon.net
Mar Mar 25 18:31:31 CET 2008
Hola Pedro,
Pedro Rodrguez Castell wrote:
> Buenos días amigos.
> Hace poco he empezado el curso C++ que hay en la web y me he quedado
> encallado en este capítulo.
>
> Vamos a ver si se explicarme bien y logro que entendais mi duda.
>
Muy bien. Veamos las dudas.
> Después de leer concienzudamente el capítulo he empezado ha hacer los
> ejercicios que se plantean. No me ha costado mucho hacer el primero, ya
> que es bastante sencillo y los conceptos están muy bien explicados en el
> capítulo.
> En el segundo ejercicio, que trata sobre hacer una estructura FECHA
> utilizando campos de bits es donde me estoy haciendo un lio tremendo.
> Para hacer la estructura debo utilizar una sola variable "unsigned short
> int" (16 bits) donde deben almacenarse 3 campos que corresponden a DIA,
> MES y AÑO.
>
> DIA - debe ser capaz de almacenar valores del 1 al 31.
> MES - debe ser capaz de almacenar valores del 1 al 12.
> AÑO - debe ser capaz de almacenar valores del 1 al 128 (limite impuesto
> por el ejercicio).
> el primer año corresponde a 1960 y el último a 2087 por lo
> tanto sería 1960 + variable AÑO.
>
Me temo que aquí es donde cometes un error. En primer lugar, el
ejercicio no dice que la estructura sea capaz de almacenar valores del 1
al 128, por lo que esto es una inferencia tuya. En segundo lugar, si
usamos tu fórmula y diseño observamos lo siguiente:
1960 = 1960 + 1
2087 = 1960 + 128
Obviamente vemos que esto no es cierto. Lo que sí podemos inducir es que
los valores mínimo y máximo son:
1960 = 1960 + 0
2087 = 1960 + 127
El intervalo es [0,127].
> Para DIA utilizo 5 bits (los necesarios para contar del 1 al 31).
> Para MES utilizo 4 bits (los necesarios para contar del 1 al 12 y aún me
> sobra).
> Para año utilizo 8 bits (los necesarios para contar del 1 al 128).
>
> Si sumo todos los bits que preciso para hacer la estructura salen 5 + 4
> + 8 = 17 bits.
>
> No puedo hacer la estructura con un sólo unsigned short int, ya que solo
> tiene 16 bits.
>
Efectivamente, pero con la explicación anterior, vemos que necesitamos 7
bits y así llegamos a los 16 bits.
> Otra cuestión es la siguiente:
> Si un "int" ocupa 16 bits que equivale a 2 Bytes. ¿Porque en el capítulo
> se cita que ocupa 4 Bytes?.
>
Esto no es necesariamente correcto. Ten presente que estamos usando
'unsigned short int' y no un 'unsigned int'. Con 'short int', tenemos
otro tipo de dato que suele ser menor a 'int'.
En fin, hoy en día los compiladores establecen que 'short int' ocupa 2
bytes e 'int' equivale a 4 bytes.
> Soy consciente de que puede que sea una tonteria lo que estoy
> preguntando pero la verdad es que me estoy volviendo chiflado con este
> tema amigos. Espero que podais ayudarme con esto.
>
No te preocupes, para esto mismo creamos la lista.
Espero que todo esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase