算术表达为0而不是1

Arithmetic expression is 0 instead of 1

本文关键字:      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main() {
  int a,b,c;
  cin >> a >> b >> c;
  cout << a/b*c;
  return 0;
}

对于a = 5 b = 10 c = 2,输出给出0,这显然是错误的。据我了解/*是二进制运算符/和 *"债券"比&lt;&lt;对于/和 *,它是从左至右计算的,因此前5个被10分开,然后将结果(0.5)乘以2(为1),该结果由1次乘以&lt;&lt;&lt;代表。

那么谁能给我解释该结果(0)?

这是整数划分问题:如果a==5b==10,则a/b==0

请参阅标准,乘法运算符[Expr.mul]

整体操作数/操作员以任何丢弃的分数零件

产生代数商

这是整数舍入的结果。执行整数划分时,任何剩余的剩余部分都会被切断。所以2 / 3 == 0

将结果保持为准确的转换使用双打或将变量转换为表达式中的双倍。所以像这样的东西

static_cast<int>(static_cast<double>(a) / static_cast<double>(b) * static_cast<double>(c))

将导致正确的值。

没有错误的

由于所有变量都是整数。

5/10在整数世界中为0,而乘以2仍然是0

9/10也是0,但11/10是1

如果您想从此有用的东西将变量称为double或IOW:

int main() {
  double a,b,c;
  cin >> a >> b >> c;
  cout << a/b*c;
  return 0;
}
相关文章:
  • 没有找到相关文章