¿Podría alguien echar un vistazo a este código descuidado y explicarme por qué no funciona? ¿Estoy empacando y desempacando cosas correctamente? (El objetivo de esta práctica de laboratorio era empaquetar una fecha utilizando el cambio de bits y el enmascaramiento. Por ejemplo, la entrada de la consola del 31/12/99 se sincronizaría en OR y luego se anularía, que es lo que mi código intentaba hacer. Gracias .Las máscaras de cambio de bits todavía me eluden
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DAY_MASK 0x3e0
#define MONTH_MASK 0xc00
#define YEAR_MASK (~0x3180)
void hr()
{
printf("-----------------------------------------------\n");
}
void fields()
{
printf(" Binary\t\tDTG\t\tBase 10\n");
}
void prnFields(unsigned int *day, unsigned int *month, unsigned int *year)
{
printBits(day);
printf("\tDay\t\t%u\n", day);
printBits(month);
printf("\tMonth\t\t%u\n", month);
printBits(year);
printf("\tYear\t\t%u\n", year);
}
int main()
{
unsigned int day;
unsigned int month;
unsigned int year;
unsigned int packed;
printf("Enter numeric Day\t:");
scanf("%d", &day);
printf("Enter numeric Month\t:");
scanf("%d", &month);
printf("Enter two digit Year\t:");
scanf("%d", &year);
printf("\n");
hr();
printf("\nPrepacked Date\n");
fields();
hr();
prnFields(day, month, year);
hr();
packed = day; packed <<= 9;
packed |= month; packed <<= 4;
packed |= year;
printf("\nPacked Date\n");
fields();
hr();
printBits(packed);printf("\t\t\t%d\n", packed);
hr();
printf("\nUnpacked Date\n");
fields();
hr();
printBits((packed & DAY_MASK));
printf("\tDay\t\t%d \n", (packed & DAY_MASK) >> 9);
printBits((packed & MONTH_MASK));
printf("\tMonth\t\t%d \n", (packed & MONTH_MASK) >> 5);
printBits((packed & YEAR_MASK));
printf("\tYear\t\t%d \n", (packed & YEAR_MASK));
//system("pause");
return(0);
}
void printBits(unsigned short int value)
{
unsigned short int mask =1;
int i;
mask<<=15;
for(i=1; i<=16; i++)
{
putchar((mask&value)? '1': '0');
if(i%8==0)
{
putchar(' ');
}
value<<=1;
}
}
¿De qué manera no funciona? –
cuando se ejecuta, si ingreso una fecha de 31,12,99 debería obtener los mismos resultados en el lado de salida, pero no es así. Probablemente debido a un mal cambio y/o enmascaramiento, que es donde creo que necesito más ayuda. – David
¿Cómo consigues que el año encaje en cuatro bits? –