算术表达为0而不是1
Arithmetic expression is 0 instead of 1
#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==5
和b==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;
}
相关文章:
- 没有找到相关文章