鱼C论坛

 找回密码
 立即注册
查看: 2844|回复: 11

求助啊!这个问题真不会

[复制链接]
发表于 2014-8-5 21:21:37 | 显示全部楼层 |阅读模式
7鱼币
1/3不是应该为0的吗,为什么结果是这个:
QQ截图20140805212020.jpg
而且为什么1.0除以3就等于0了,这是为什么,1.0和1有什么区别?

最佳答案

查看完整内容

首先,除法分为整数除法和浮点数除法。 1/3数整数除法, 结果为整数0, 1.0/3是浮点数除法,结果是浮点数0.333333... 第二,显示出错,是因为printf是格式输出,就是说一样的数据通过不一样的格式会输出不一样的结果。 将浮点数0.33333...按整数%d格式输出结果为1431655765是没错。这个请看浮点数的存储格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-5 21:21:38 | 显示全部楼层
首先,除法分为整数除法和浮点数除法。 1/3数整数除法, 结果为整数0, 1.0/3是浮点数除法,结果是浮点数0.333333...
第二,显示出错,是因为printf是格式输出,就是说一样的数据通过不一样的格式会输出不一样的结果。
将浮点数0.33333...按整数%d格式输出结果为1431655765是没错。这个请看浮点数的存储格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-5 21:29:07 | 显示全部楼层
本帖最后由 剑雨君 于 2014-8-5 21:31 编辑

1.0是浮点类型,所以1.0/3就是要int类型的3转化成浮点型再进行运算,但是输出的是%d格式,所以数据就出错了。要么就这样:(int)1.0/3 ,要么就将%d改成%f。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-5 22:15:14 | 显示全部楼层
1/3 = 0
1.0/3 = 0.3333333
然后你吧浮点型的用整形方式输出所以就这样了
应为不管是什么在内存中的存储都是一样的以不同的方式读而已
比如 都是 a 拼音的读法和英语的读法就不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-5 23:19:09 | 显示全部楼层
看下浮点数与整型的存储方式,看下0.333333的浮点数得出的整数的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-6 00:04:43 | 显示全部楼层
前来观看。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-7 11:30:07 | 显示全部楼层
本帖最后由 梦想与现实 于 2014-8-7 11:32 编辑

给你解释一下啊:
你的 1.0/3 这里的1.0会被编译器识别为双精度浮点数,在程序运行过程当中,处理器会将1.0/3的运算结果也就是0.333333333... 放入到浮点协处理器中,此时这值占用内存中的8个字节空间大小,然后你格式化输出的格式为 %d,编译器则认为你要将此双精度浮点数转换为一个4字节整形输出,这里会发生一次隐式转换,则是将一个8字节双精度浮点强转为一个4字节整形,会默认去低4字节进行转换的,所以输出结果为一个整形数值。下面开始上图: 1.jpg

1.0/3的计算记过在浮点协处理中
2.jpg

经过IEE浮点编码处理过的8字节双精度浮点数体现方式:
3.jpg

4.jpg

隐式转换为%d格式为4字节整形 默认取低4位进行转换
5.jpg

用计算器算一下 0x55555555的值是多少??
6.jpg

7.jpg

1431655765是不是就是你 %d 格式化输出的数值呢!

到此问题解答完毕,顺便说一下在没有可以认为进行强制类型转换的时候 最好不要让隐式转换这种容易丢失精度的事情发生。希望对你有所帮助。




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 10:50:13 | 显示全部楼层
1.0是浮点类型嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 10:50:48 | 显示全部楼层
苹果沃珂 发表于 2014-8-5 23:12
首先,除法分为整数除法和浮点数除法。 1/3数整数除法, 结果为整数0, 1.0/3是浮点数除法,结果是浮点数0.3 ...

解释的比较好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 13:19:54 | 显示全部楼层
d改成lf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 15:26:20 | 显示全部楼层
我来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-9 13:00:02 | 显示全部楼层
以上用好的解答 为什么lz不采纳呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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