请告诉我我的错误在哪里,为什么我不能(完全)以二进制格式打印双格式的数量?
例如,20.18
0 10000000011 0100001011100001010001111010111000010100011110101110
位数对应IEEE 754标准,第一位(符号)对应开头,这是肯定的,因为我试过 -20.18,结果是 1,但其余的根本不收敛:(
这是代码本身:
void PrintByte(char a) //выводит на экран монитора двоичное представление переменной а типа unsigned char.
{
int i;
char mask = 1 << 7;
for (i = 0; i < 8; i++) {
printf("%i", a & mask ? 1 : 0);
a <<= 1;
}
}
void PrintVar(void *a, int size) //выводит на экран монитора двоичное представление переменной а произвольного типа размером size байт
{
int i;
char *p = a;
for (i = size - 1; i >= 0; i--) PrintByte(*(p + i));
puts("");
}
int main() {
double d = 20.18;
PrintVar(&d, sizeof(double));
return 0;
}
总的来说,感谢@andreymal,我意识到一切正常,只是我无法猜测结果是正确的,但它是使用以下公式计算的:
根据我们考虑的公式(Python):