Как-то препод просил выводить числа с плавающе точкой в двоичное представление.
Код:
void PrintHEXView(float f); // функция печатает 16-тиричное представление числа
void PrintBINView(float f); // функция печатает двоичное представление числа
int main(int argc, char* argv[])
{
float f = 12.140625;
PrintHEXView(f);
printf("\n");
PrintBINView(f);
printf("\n");
return 0;
}
/////////////////////////////////////////////
void PrintHEXView(float f)
{
void *b = (BYTE*)&f;
int i = sizeof(f)-1;
printf("0x");
for (; i >= 0; i--)
{
if (*((BYTE*)b+i) == 0)
printf("00");
else
printf("%X", *((BYTE*)b+i));
}
}
/////////////////////////////////////////////
char *table[16] =
{
"0000",
"0001",
"0010",
"0011",
"0100",
"0101",
"0110",
"0111",
"1000",
"1001",
"1010",
"1011",
"1100",
"1101",
"1110",
"1111"
};
void PrintBINView(float f)
{
void *b = (BYTE*)&f;
int i = sizeof(f)-1;
BYTE bit;
for (; i >= 0; i--)
{
bit = *((BYTE*)b+i);
printf("%s%s", table[bit>>4], table[bit&0xf]);
}
printf("b");
}
Только одного не понимаю, одно дело выводить из на печать, и другое дело переводить, они и так в двоичном (шестнадцатиричном) виде в памяти представлены, зачем переводить?