Search code examples
c++binaryfloating-pointieee-754

Floating Point to Binary Value(C++)


I want to take a floating point number in C++, like 2.25125, and a int array filled with the binary value that is used to store the float in memory (IEEE 754).

So I could take a number, and end up with a int num[16] array with the binary value of the float: num[0] would be 1 num[1] would be 1 num[2] would be 0 num[3] would be 1 and so on...

Putting an int into an array isn't difficult, just the process of getting the binary value of a float is where I'm stuck. Can you just read the binary in the memory that the float variable? If not, how could I go about doing this in C++?

EDIT: The reason for doing the comparison this way is that I am wanting to learn to do bitwise operations in C++.


Solution

  • Use union and bitset:

    #include <iostream>
    #include <bitset>
    #include <climits>
    
    int main()
    {
        union
        {
            float input; // assumes sizeof(float) == sizeof(int)
            int   output;
        } data;
    
        data.input = 2.25125;
    
        std::bitset<sizeof(float) * CHAR_BIT> bits(data.output);
        std::cout << bits << std::endl;
    
        // or
        std::cout << "BIT 4: " << bits[4] << std::endl;
        std::cout << "BIT 7: " << bits[7] << std::endl;
    }
    

    It may not be an array but you can access bits with [] operator as if you were using an array.

    Output

    $ ./bits
    01000000000100000001010001111011
    BIT 4: 1
    BIT 7: 0