representing a float value as its bit representation

Started by
5 comments, last by Beserkerfork 21 years, 2 months ago
I am looking for a C/C++ function that will allow me to input a floating point variable and output the ''1'' or ''0'' at that point in memory. I''ve tried all that I know (my programming experience isn''t too extensive), but I can do it well enough with an unsigned int value (sample code for that is all over the place...) Thanks
Advertisement
The binary representation for a 32 bit floating point is a little more complicated. I can point you in the right direction:

Bit 1: The Sign. 0 is positive.
Bits 2-10: The mantissa (ie: 2^x where these bits represent the x. Note that you subtract 127 from the raw value of these bits to get the proper mantissa and to fidn the binary form that should go here you add 127 to the mantissa; this is done to help speed up sorting and is called bias 127 representation)
Bits 9-32 - The fractional part of the float. Note that you never store the first 1 of the scientific notation because it is ALWAYS there. This is called the hidden bit trick.

For example the computer stores 136.78 as 1.3678*10^2
Note that in this form there is always a 1 before the decimal point. This 1 is not stored in the 32 bits because it is always assumed to be there. So bits 9-32 store the .3678 part. Also note that binary numbers to the right of the decimal point work as in base 10 but for base 2. ie the first place is 1/2 the second place is 1/4 the third is 1/8 and so on. Does this make sense?

[edited by - acw83 on January 29, 2003 11:43:04 PM]

[edited by - acw83 on January 29, 2003 11:54:15 PM]
I figure I''ll give you an example:

17.125

Bit 1: Positive so set to 0
Now convert the number to binary form:
17 = 10001
.125 = .001
So the binary form of 17.125 is 10001.001
Now set to scientific notation:
1.0001001 * 2^4 (Base 2 notation...)
Ok so now the mantissa is 4. So set bits 2-9 to 4 + 127:
Bits 2-10: 10000011
Now bits 11-32 Get the .0001001 (Remember not to include the 1 before the binary point)
So final is:
0100000110001001 and then you add enough 0''s to make 32 total bits:
01000001100010010000000000000000

Does this help?
well this works for outputting the stored representation of a float in hexadecimal, then it''s easy enough to convert hex to binary

float x = 16.6667;
cout << hex << (long & x;
That helps a lot, I am ok on how the floating point representation works- I was just having trouble looking at it, since the same technique couldn''t be used, but I think I have it cleared up now, thanks a bunch.
float x=1.56;
long *ToDisp;

ToDisp = (long*)&x

Display the binary of the long, to view the binary of the float . This should work properly, although I haven''t tested it myself.
quote:Original post by Beserkerfork
I am looking for a C/C++ function that will allow me to input a floating point variable and output the ''1'' or ''0'' at that point in memory. I''ve tried all that I know (my programming experience isn''t too extensive), but I can do it well enough with an unsigned int value (sample code for that is all over the place...)

It depends exactly on what you are trying to achieve. If you truly want to work with the bits of the float, then you can reinterpret_cast it to an integral type:
unsigned int &ui = reinterpret_cast(f); 

This topic is closed to new replies.

Advertisement