二楼答主的回答是切题的,建议题主看下这个:http://blog.
尽管我也非专业,表示还是能看懂二楼答主及上述链接的解答,就楼主示例,我理解如下:
a.i、a.ch、a.f共用存储区,因此他的内存数据相同。现a.i=97,在存储区的二进制表示为a.i=00000000 00000000 00000000 01100001(0x00000061),因此根据IEEE 754规则,a.f浮点数的二进制数值应该是1.0000000 00000000 01100001*2^-127,小数点后面127个0,这个数实在太小了,%f格式实在无法显示到这个精度,只能用约等于0表示。
实际上题主如果将显示格式调整为%e的格式(printf("%d\n%c\n%e\n", a.i, a.ch, a.f);),还是能看到这个数的,这个数据的十进制值为:1.35926e-43