I found a way to convert a float to binary in c through this answer: Convert float to binary in C, but I'm not sure what the code used in the answer *((int*)&f) actually does to convert the number. What does it do exactly?
            Asked
            
        
        
            Active
            
        
            Viewed 376 times
        
    3
            
            
         
    
    
        Pahasa
        
- 35
- 5
- 
                    3It takes the address (`float *`), casts to `int *`, and dereferences. But see https://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule - use `memcpy` instead! – o11c Sep 29 '19 at 00:40
1 Answers
7
            It invokes undefined behavior, meaning your program is invalid if it's reachable.
What someone intended for it to do is to reinterpret the bits of a float as an int, assuming int is 32-bit and probably also that float is IEEE single.
There are two correct ways to do this (int replaced with uint32_t to remove the first useless assumption):
- (union { float f; uint32_t i; }){f}.i
- uint32_t i; memcpy(&i,&f,sizeof i);
 
    
    
        R.. GitHub STOP HELPING ICE
        
- 208,859
- 35
- 376
- 711
- 
                    Side note: the purpose of re-interpreting the bits of a float is generally to access underlying (implementation defined) internal representation of a float, typically sign bit, biased exponent, and significand bits... Sun fdlibm mathematical library use those bits extensively (for double precision). – aka.nice Sep 30 '19 at 17:10
- 
                    @R.. So if I'm understanding 2 correctly, `memcpy` just copies the address of `f` and makes it the address of `i` as well, and since `i` is a `uint32_t` the bits are reinterpreted as that type? If it is, was IEEE-754 built with this application in mind or is this something that was discovered at a later date? – Pahasa Oct 01 '19 at 17:54