鱼C论坛

 找回密码
 立即注册
查看: 2250|回复: 2

神秘的5——关于常量的类型

[复制链接]
发表于 2012-6-25 01:38:06 | 显示全部楼层 |阅读模式
1鱼币
int main()
{
float a;
a=1.1;
}
当我编译这样一段程序,VC会提示:warning C4305: '=' : truncation from 'const double ' to 'float '。
经过百度,原来“在C语言中,如果不指定数据类型,那么小数常量会被认为是 double 类型”。
a是float,而1.1是double。 double 不能隐式转换为 float ,所以才会产生这个warning。

可是!!当我将1.1改为1.5,再次编译,编译器却没有提示warning!(我又再次把1.5改为10.5,编译后仍然没提示warning)
我发现:凡是类似于X.5这种形式的常量都不会提示warning。

---------------------------------------------------------------------------
-----于是我产生疑惑:难道以5结尾的常量不是当做double类型吗?------
---------------------------------------------------------------------------
纠结了很久,希望知道的人能告诉下,谢谢!!
虽然这个warning并不影响程序,但是我想知道这个warning是怎么产生的。

最佳答案

查看完整内容

我在vc6,试了一下如楼主,所说。 我想这可能和小数的表示形式有关,在二进制下,无法精确表示 0.1(1/10),但可以精确表示,诸如,0.5,0.25 * (n),0.125 * (n) , 0,0625 * (n), 也就是2∧ -n方(等价于1/ (2∧n)) 。你可以法尝试一下 0.75 = 0.25 * 3, 或者 0.625 = 0.125 * 5,均不提示warning
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-25 01:38:07 | 显示全部楼层
本帖最后由 yuprxk 于 2012-6-25 08:42 编辑

我在vc6,试了一下如楼主,所说。 我想这可能和小数的表示形式有关,在二进制下,无法精确表示 0.1(1/10),但可以精确表示,诸如,0.5,0.25 * (n),0.125 * (n) , 0,0625 * (n), 也就是2∧ -n方(等价于1/ (2∧n)) 。你可以法尝试一下 0.75 = 0.25 * 3, 或者 0.625 = 0.125 * 5,均不提示warning
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-25 09:02:03 | 显示全部楼层
这应该关系到精度(转化)的问题{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 23:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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