конвертировать число из десятичного в двоичное (IEEE 754), объем памяти для записи числа должен быть 8 байт

нашел в интернете вот такую программу на си, но я не понимаю union, struct не могу понять, сколько памяти сейчас отводится для записи числа, т.к нужно 8 байт. printf("%d sizeof \n", sizeof(var.f)); 4 байта float f;может здесь нужен double

#include <stdio.h>//ограничение по библиотекам  math, stdlib, conio

void printBinary(int n, int i)
{

    // Prints the binary representation 
    // of a number n up to i-bits. 
    int k;
    for (k = i - 1; k >= 0; k--) {

        if ((n >> k) & 1)
            printf("1");
        else
            printf("0");
    }
}

typedef union {

    float f;
    struct
    {

        // Order is important. 
        // Here the members of the union data structure 
        // use the same memory (32 bits). 
        // The ordering is taken 
        // from the LSB to the MSB. 
        unsigned int mantissa : 23;
        unsigned int exponent : 8;
        unsigned int sign : 1;

    } raw;
} myfloat;

// Function to convert real value 
// to IEEE foating point representation 
void printIEEE(myfloat var)
{

    // Prints the IEEE 754 representation 
    // of a float value (32 bits) 

    printf("%d | ", var.raw.sign);
    printBinary(var.raw.exponent, 8);
    printf(" | ");
    printBinary(var.raw.mantissa, 23);
    printf("\n");
}

// Driver Code 
int main()
{

    // Instantiate the union 
    myfloat var;

    // Get the real value 
    var.f = -641.34441;
    printf("%d sizeof var.f \n", sizeof(var.f));//4 байта

    // Get the IEEE floating point representation 
    printf("IEEE 754 representation of %f is : \n",
        var.f);
    printIEEE(var);

    return 0;
}

Ответы (0 шт):