d:\microsoft visual studio\study\习题4.5答案验证.cpp(5) : warning C4305: 'initializing' : truncation from 'const double' to 'float'
d:\microsoft visual studio\study\习题4.5答案验证.cpp(5) : warning C4305: 'initializing' : truncation from 'const double' to 'float'
#include<stdio.h>
void main()
{
int a=5,b=7;
float x=67.8564,y=-789.124; \\被警告的地方。
char c='A';
long n=1234567;
unsigned u=65535;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b);
printf("%f,%f\n",x,y);
printf("%-10f,%-10f\n",x,y);
printf("%8.2f,%8.2f,%4f,%4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,%10.2e\n",x,y);
printf("%c,%d,%o,%x\n",c,c,c,c);
printf("%ld,%lo,%x\n",n,n,n);
printf("%u,%o,%x,%d\n",u,u,u,u);
printf("%s,%5.3s\n","COMPUTER","COMPUTER");
}
在百度知道上搜到类似问题:
例题是这样的,我用的VC++6.0,运行时就出现在条警告!float 是单精度浮点型 double是双精度浮点型.这些我知道,但是这题明明定义的float,关double叼事..实在不明白?
#include<iostream>
using namespace std;
int main()
{float x;int i;
x=3.6;i=(int)x;
cout<<"x="<<x<<",i="<<i<<endl;
return 0;}
回答是这样的:在 C 语言中,如果不指定数据类型,那么小数常量会被认为是 double 类型的。
因此在你的初始化中
x = 3.6;
这一句,x 是 float 类型的,但是 3.6 是 double 类型的,由于它是常量,所以编译器称为 const double。double 是不能隐式转换为 float 的。
对这段回答,我明白,可是我的是直接在指定数据类型后赋值的(也就是初赋值):float x=67.8564,y=-789.124;
而不是这样:float x,y;
x=67.8564;
y=-789.124;
难道像我这样的初赋值中,系统也要把小数认为是double型的?那前面的float不是等于没意义了吗?更何况这不是个常量啊!
求各位高手解答,谢谢!!:s007:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。