I have this simple program
#include
int main(void)
{
unsigned int a = 0x120;
float b = 1.2;
printf(\"%X %X\\n\", b, a);
return 0;
}
If you want to see the bits of a stored float, use a union:
float b = 1.2;
union {
float f;
int i;
} u;
u.f = b;
printf ("%x\n", u.i);
results (32-bit x86):
3f99999a
Firstly, it's undefined behaviour to pass arguments to printf not matching the format specifiers.
Secondly, the float is promoted to double when passed to printf, so it's eight bytes instead of four. Which bytes get interpreted as the two unsigned values expected by the printf format depends on the order in which the arguments are pushed.