You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++代码中括号对算术运算结果的影响问题咨询

为什么给(5/9)加括号后C++代码输出全为0?

嘿,我来帮你把这个问题掰扯明白!核心原因其实是整数除法的规则加上括号改变了运算顺序,咱们一步步来看:

首先得记住C++里的一个关键规则:当两个整数做除法时,结果会直接截断小数部分,只保留整数。所以5/9的结果是0——因为5比9小,小数部分直接被砍掉了,这是整数除法的特性。

接下来对比两种写法的运算过程:

第一种写法:answers[i] = (a - 32) * 5/9;

这里的运算顺序是按照优先级来的:乘法和除法是同级运算,从左到右执行。

  1. 先计算(a - 32),得到一个整数(比如a=68的话,结果是36);
  2. 然后乘以5,得到36*5=180(还是整数);
  3. 最后除以9,180/9=20,这正好是正确的摄氏度结果。
    因为先做乘法再做除法,中间的乘积足够大,整数除法的截断不会破坏预期结果。

第二种写法:answers[i] = (a - 32) * (5/9);

这里的括号直接改变了运算顺序!括号的优先级最高,所以会先计算括号里的内容:

  1. 先算5/9,根据整数除法规则,结果是0;
  2. 再用(a - 32)乘以0——不管a是什么值,结果都是0,所以你的输出自然全是0了。

额外小提示

如果想要更精确的结果(比如保留小数),可以把其中一个操作数改成浮点数,比如写成(a - 32) * 5.0/9或者(a - 32) * (5.0/9),这样运算就会以浮点数的方式进行,得到的结果就会是正确的浮点值,之后如果需要转整数再做处理就行。

内容的提问来源于stack exchange,提问作者Programming Rage

火山引擎 最新活动