C++代码中括号对算术运算结果的影响问题咨询
为什么给(5/9)加括号后C++代码输出全为0?
嘿,我来帮你把这个问题掰扯明白!核心原因其实是整数除法的规则加上括号改变了运算顺序,咱们一步步来看:
首先得记住C++里的一个关键规则:当两个整数做除法时,结果会直接截断小数部分,只保留整数。所以5/9的结果是0——因为5比9小,小数部分直接被砍掉了,这是整数除法的特性。
接下来对比两种写法的运算过程:
第一种写法:answers[i] = (a - 32) * 5/9;
这里的运算顺序是按照优先级来的:乘法和除法是同级运算,从左到右执行。
- 先计算
(a - 32),得到一个整数(比如a=68的话,结果是36); - 然后乘以5,得到
36*5=180(还是整数); - 最后除以9,
180/9=20,这正好是正确的摄氏度结果。
因为先做乘法再做除法,中间的乘积足够大,整数除法的截断不会破坏预期结果。
第二种写法:answers[i] = (a - 32) * (5/9);
这里的括号直接改变了运算顺序!括号的优先级最高,所以会先计算括号里的内容:
- 先算
5/9,根据整数除法规则,结果是0; - 再用
(a - 32)乘以0——不管a是什么值,结果都是0,所以你的输出自然全是0了。
额外小提示
如果想要更精确的结果(比如保留小数),可以把其中一个操作数改成浮点数,比如写成(a - 32) * 5.0/9或者(a - 32) * (5.0/9),这样运算就会以浮点数的方式进行,得到的结果就会是正确的浮点值,之后如果需要转整数再做处理就行。
内容的提问来源于stack exchange,提问作者Programming Rage




