#include <stdio.h>
union p{
int x;
float y;
};
int main()
{
union p p;
p.x = 10;
printf("%f\n", p.y);
return 0;
}
Output:
0.000000
When I am trying to compile above programs, it is not showing any warnings,
even in the main function. Why is printf
not printing value 10.00000
?
I have read some related questions on stackoverflow which explains behavior of printf
while printing integer without typecasting with float specifier, but i think here it is a different case. I am printing float number with float specifier. It should print the proper value. Can anyone explain what is happening here?
This is due to a fact that both int
and float
objects have different binary representations. Assuming 32-bit int
and float
, little-endian and IEEE-754 representation, you have binary pattern as:
0000 1010 0000 0000 0000 0000 0000 0000
that is (in context of floating number) very small number, which has printed value as 0.000000
using %f
format specifier (one may say that is rounded by printf
). You might try with %e
f.s., which results into another output:
1.401298e-44
C99 introduced %a
f.s., which represents floating-number exactly as it's stored, namely as 2-base floating-point number (i.e. with mantissa and exponent):
0x1.4p-146
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With