联盟和价值

问题描述 投票:4回答:1
#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
c
1个回答
3
投票

假设你的系统使用IEEE754双精度浮点格式,以实现一个 double的表示方式,即 num 包含1个符号位,后面是11位的指数,后面是52位的万字符。 另外,假设你的系统使用小字节排序,那么在你的系统中的 char 中的最不显著的字节,覆盖在了 double意思是说,当你改变了 a.

你看不出有什么不同,因为 %f 默认只显示6位小数点,而一个 double 这种表示方法有大约16个有意义的小数位。

如果你把格式指定器改为 %.16f 你会看到区别。

5.8234000000000004
5.8234000000000794 b
© www.soinside.com 2019 - 2024. All rights reserved.