鱼C论坛

 找回密码
 立即注册
查看: 748|回复: 5

[已解决]求助呀

[复制链接]
发表于 2020-4-13 00:45:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

int main()
{
    double a=4.5;
    printf("%d",a);
    return 0;
}

这样写为什么系统不报错,而运行显示0呀?
最佳答案
2020-4-13 00:53:25
因为你是用%d输出的。double是八个字节,你使用%d输出只能输出前四个字节。
double的4.5在内存中存储的前四个字节就是0,
你可以用此程序看一下
#include <stdio.h>
union Num{
    double lf;
    int d[2];
    char ch[8];
};
int main()
{
    int i;
    union Num num;
    num.lf=4.5;
    printf("double类型的4.5存储,占8个字节\n");
    printf("f=%f\n两个四字节以16进制显示:",num.lf);
    for(i=0;i<2;i++)
        printf("d[%d]=%x\t",i,num.d[i]);
    printf("\n两个四字节以10进制显示:");
    for(i=0;i<2;i++)
        printf("d[%d]=%d   ",i,num.d[i]);
    printf("\n八个单字节:");
    for(i=0;i<8;i++)
        printf("ch[%d]=%d   ",i,num.ch[i]);
    return 0;
}
有兴趣的话,还可以看看我写的这个帖子
C语言中浮点数存储与%f输出细节探究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-13 00:53:25 | 显示全部楼层    本楼为最佳答案   
因为你是用%d输出的。double是八个字节,你使用%d输出只能输出前四个字节。
double的4.5在内存中存储的前四个字节就是0,
你可以用此程序看一下
#include <stdio.h>
union Num{
    double lf;
    int d[2];
    char ch[8];
};
int main()
{
    int i;
    union Num num;
    num.lf=4.5;
    printf("double类型的4.5存储,占8个字节\n");
    printf("f=%f\n两个四字节以16进制显示:",num.lf);
    for(i=0;i<2;i++)
        printf("d[%d]=%x\t",i,num.d[i]);
    printf("\n两个四字节以10进制显示:");
    for(i=0;i<2;i++)
        printf("d[%d]=%d   ",i,num.d[i]);
    printf("\n八个单字节:");
    for(i=0;i<8;i++)
        printf("ch[%d]=%d   ",i,num.ch[i]);
    return 0;
}
有兴趣的话,还可以看看我写的这个帖子
C语言中浮点数存储与%f输出细节探究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 00:54:41 | 显示全部楼层
        printf() 中的格式描述符 %d 是用来输出整型数的,不能用来输出双精度数
    printf("%d",a);
        a 是双精度变量,所以,printf() 中的格式描述符应该使用 %lf
    printf("%lf",a);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 02:42:02 From FishC Mobile | 显示全部楼层
输出double型的变量要用lf%哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 08:59:31 | 显示全部楼层
Aiopr 发表于 2020-4-13 02:42
输出double型的变量要用lf%哦

你写反了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 13:05:55 | 显示全部楼层
本帖最后由 4goodworld 于 2020-4-13 13:07 编辑

你以为写清楚了数据类型,double a=4.5,但a这个变量的值在内存里面的体现就是一组4字节或者说是32位的0和1的组合而已,
理论上 double  应该用%lf格式来 printf
而你非要用%d来打印,
就好像
he,你英文翻译的是“他”,而拼音的意思就是“和”,我们一般理解,he是英文的居多点,
但你非要说我这个是拼音模式,那么打印出来的意思就只能是发音为he的中文意思
同理,编译器看你 %d 那么就把a变量这串组合按照int型的表达表示表达出来,结果就是你看到的那样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表