64位十进制转二进制

convert 64 bit decimal to binary

我想将 double num 转换为二进制,但尾数不起作用,我不知道为什么,这是代码... 请不要使用其他库(仅 stdio)

 void printBinary(int n, int i)
{
    int k;
    for (k = i - 1; k >= 0; k--) {

        if ((n >> k) & 1)
            printf("1");
        else
            printf("0");
    }
}
typedef union {
    double f;
    struct
    {
        unsigned long long mantissa : 52;
        unsigned long long exponent : 11;
        unsigned long long sign : 1;

    } raw;
} myDouble;
void printIEEE(myDouble var)
{
    printf("%d |", var.raw.sign);
    printBinary(var.raw.exponent, 11);
    printf(" | ");
    printBinary(var.raw.mantissa, 52);
    printf("\n");
}

然后我在 main

myDouble var;
var.f = -8.34;
printf("IEEE 754 representation of %f is : \n",
        var.f);
    printIEEE(var);

你的二进制打印函数是

void printBinary(int n, int i)

但您传递的是 unsigned long long 值。请将函数更改为

void printBinary(unsigned long long n, int i)