为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么这里不可以强制转换后输出0.75?

按照上一节的强制转换规则为什么得不到0.75?

http://img1.sycdn.imooc.com//5d763d94000169d013081034.jpg

正在回答

2 回答

这是更正,你原来的代码里的错误http://img1.sycdn.imooc.com//5d7652b10001747207080285.jpg

2 回复 有任何疑惑可以回复我~
#1

Aliloya 提问者

根据说明“数据类型和表达式都必须加括号,如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了”,如果你这样写的话,我的理解是,把c用强制类型转换由int变成了double,再进行c/d的运算。 由于此时c为double,d仍为int,根据自动类型转换规则,自动向大的方向转换。 由此d也自动转换为了double进行运算,因而输出的是0.75. 可是这用的是自动类型转换呀。 我要如何使用强制类型转换完成这个操作呢? 还是说我这样的理解是错误的呢?
2019-09-09 回复 有任何疑惑可以回复我~
#2

小神0x00 回复 Aliloya 提问者

你的理解没错,但是不这样结果只能为0了,不会输出0.75。因为c,d的数据类型是int,所以c/d为0,在double强制类型转换之前的值就是0了。
2019-09-09 回复 有任何疑惑可以回复我~
#3

Aliloya 提问者 回复 小神0x00

明白了,所以这里只能用自动类型转换了。。。 谢谢你
2019-09-09 回复 有任何疑惑可以回复我~

真相只有一个http://img1.sycdn.imooc.com//5d764e3d0001a83606880274.jpg

0 回复 有任何疑惑可以回复我~
#1

Aliloya 提问者

可是这样就是直接声明了类型为double,后面printf()内即便不用强制类型转换也可以输出吧? 但我纠结的点在于,强制类型转换存在的意义在哪里呢? 我当然可以用int c,d;double e,f;然后用自动类型转换把c,d赋值给e,f,来求e/f,可以得到我想要的结果。 可是这是自动类型转换,那是什么样的情况无法解决,才引出了强制类型转换这个概念的呢?
2019-09-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问为什么这里不可以强制转换后输出0.75?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信