[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