Czy ktoś mógłby rzucić okiem na ten niechlujny kod i wyjaśnić mi, dlaczego to nie działa. Czy poprawnie pakuję i rozpakowuję rzeczy? (celem tego laboratorium było spakowanie daty za pomocą zmiany i maskowania bitów, na przykład wejście na konsolę 31/12/99 byłoby OR'owane razem, a następnie wyrejestrowane, co jest tym, co próbował mój kod. .Masek zmiany biegów wciąż mnie nie interesują
#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;
}
}
W jaki sposób to nie działa? –
po uruchomieniu, jeśli wprowadzę datę 31.122,99, powinienem otrzymać takie same wyniki po stronie wyjścia, ale nie. Najprawdopodobniej z powodu złego przeniesienia i/lub maskowania, w którym myślę, że potrzebuję największej pomocy. – David
Jak sprawić, by rok pasował do czterech bitów? –