标题:不同精度相加的问题?我觉得我没错啊,可结果却错了
只看楼主
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
得分:0 
回复 4楼 kin3z
你这么写本身就说不过去,只是编译器没报错。

a=a+b

看 = 的右边:a+b 不用说 ,自动转换成了float型,也就是a+b的值是float型

然而你把一个浮点数赋值给一个整形变量,你不觉得有问题吗?

你醒了?快起来敲代码!!
2015-03-18 10:30
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
得分:0 
回复 11楼 code力力
可怕的是,我的IDE直接编译过了,没提示注意,更没提示错误。。。。
输出结果检查过了,是4字节的数据,无论赋值的数据类型是float还是double,被赋值的变量a通过sizeof显示都是4,%d输出结果为10,无误。。。。
所以,书里说的,低类型赋值给高类型到底是自动类型转换的?还是需要人工强制类型转换?
自动类型转换的,那printf的a应该提升到了double,但检查显示是int。
那是否编译器以副本的方式操作?先算出表达式的结果double,然后赋值的double的副本变量a,再类型降级回int赋给真正的int a?但这又不大可能吧,太不安全了。
所以,我才说我凌乱了。。。

2015-03-18 16:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-442766-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067805 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved