#include<stdio.h>
typedef union{
char a;
double num;
}uni;
int main(){
uni name;
name.num=5.8234;
printf("%lf\n",name.num);
name.a='b';
printf("%lf %c\n",name.num,name.a);
printf("\n");
}
为什么双数值不变?
输出。
5.823400
5.823400 b
假设你的系统使用IEEE754双精度浮点格式,以实现一个 double
的表示方式,即 num
包含1个符号位,后面是11位的指数,后面是52位的万字符。 另外,假设你的系统使用小字节排序,那么在你的系统中的 char
中的最不显著的字节,覆盖在了 double
意思是说,当你改变了 a
.
你看不出有什么不同,因为 %f
默认只显示6位小数点,而一个 double
这种表示方法有大约16个有意义的小数位。
如果你把格式指定器改为 %.16f
你会看到区别。
5.8234000000000004
5.8234000000000794 b