求助呀
#include <stdio.h>int main()
{
double a=4.5;
printf("%d",a);
return 0;
}
这样写为什么系统不报错,而运行显示0呀? 因为你是用%d输出的。double是八个字节,你使用%d输出只能输出前四个字节。
double的4.5在内存中存储的前四个字节就是0,
你可以用此程序看一下
#include <stdio.h>
union Num{
double lf;
int d;
char ch;
};
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);
printf("\n两个四字节以10进制显示:");
for(i=0;i<2;i++)
printf("d[%d]=%d ",i,num.d);
printf("\n八个单字节:");
for(i=0;i<8;i++)
printf("ch[%d]=%d ",i,num.ch);
return 0;
}
有兴趣的话,还可以看看我写的这个帖子
C语言中浮点数存储与%f输出细节探究 printf() 中的格式描述符 %d 是用来输出整型数的,不能用来输出双精度数
printf("%d",a);
a 是双精度变量,所以,printf() 中的格式描述符应该使用 %lf
printf("%lf",a); 输出double型的变量要用lf%哦 Aiopr 发表于 2020-4-13 02:42
输出double型的变量要用lf%哦
{:10_334:}你写反了 本帖最后由 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型的表达表示表达出来,结果就是你看到的那样
页:
[1]