[C con Clase] Tamaño de los campos de bits

Steven Davidson steven en conclase.net
Mar Feb 20 02:10:39 CET 2007


Hola Alejandro,

El pasado 2007-02-19 11:43:20, Alejandro escribió:

A> Hola, tengo otro problema con el ejercicio de las fechas. En este caso es con el que hay que verificar la fecha con una función "bool".
A> El caso es que yo tengo la siguiente estructura:
A> struct Fecha
A> {
A>     unsigned short int dia:5;
A>     unsigned short int mes:4;
A>     unsigned short int anno:7;
A> }Param[10];
A> Y, después de usar una variable auxiliar para pasar los datos a la estructura como me dijisteis, es cuando tengo el problema:
A> En la variable auxiliar para el mes yo meto un numero, como por ejemplo 34, a través de un cin >>.
A> Al pasarlo a la variable 'Param[x].mes' se transforma ese 34 en 2, con lo que cuando voy a comprobar si el día es correcto siempre lo es excepto cuando los meses son de menos de 31 días y tú introduces el número 31.
A> Yo supongo que este cambio de 34 a 2 es debido a que en 5 bits sólo caben números del 0 al 31, con lo que cuando es mayor vuelve a empezar. 

Efectivamente. El miembro 'mes' fue definido como 5 bits y por tanto es lo único que puede almacenar, descartando cualesquier bits restantes.

A> ¿Cómo lo soluciono?

Podrías hacer dos verificaciones:

1. Si el valor introducido por el usuario se puede guardar correctamente en cada miembro de la estructura. Esto lo puedes hacer en 'main()'.

2. Aplicar la verificación de la fecha acorde al mes y si el año es bisiesto o no. Esto es lo que tienes que implementar según el enunciado del ejercicio.

A> P.D.: ¡Ah, muchas gracias por enviar la correción de los ejercicios, Steven, ya estoy trabajando en ello!

De nada; para eso estamos, cuando no se nos acumulan las cosas :(


En fin, espero que esto te aclare las dudas.

Steven


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