C++中x/2与x*0.5结果为何不同?隐式转换疑问
为什么C++中整数除法结果不会隐式转为浮点数输出?
先看你给出的代码:
for(int col = 1; col <= 5; col ++){ qDebug() << col; qDebug() << col/2; qDebug() << col*0.5; }
对应的输出:
1
0
0.52
1
13
1
1.54
2
25
2
2.5
核心原因是C++的运算类型匹配规则:
- 当两个操作数都是整数类型(比如这里的
col是int,2也是int),执行的是整数除法,运算结果会直接截断小数部分,最终结果的类型还是int。比如1/2得到的是int类型的0,3/2得到int类型的1,qDebug输出的时候只是如实打印这个整数,根本不存在“转float”的环节——因为结果本身就是整数。 - 而
col*0.5中,0.5是double类型,这时候C++会自动把int类型的col隐式转换为double,再执行浮点乘法,结果是double类型,所以输出的时候会显示带小数的数值。
要是想让整数除法得到浮点结果,要么把其中一个操作数转成浮点类型,比如写col / 2.0或者static_cast<double>(col)/2,这样运算就会按浮点规则执行,结果就是浮点类型,输出自然也是带小数的。
内容的提问来源于stack exchange,提问作者DanDanBro12
相关产品推荐
相关产品推荐

