【问题标题】:Getting wrong result when using Compound multiplication statement - C#使用复合乘法语句时得到错误的结果 - C#
【发布时间】:2021-08-31 13:50:04
【问题描述】:

我注意到一些非常奇怪的事情。在下面的代码sn-p中,Console上输出的结果总是0

int result = 0;
for(int i = 1; i < 4; i++)
{
  result *= 10 + i;
}
Console.WriteLine(result);

看起来result *= 10 + i; 总是将10 乘以result(其中result0)并且没有将i 添加到它。

如果我只改变乘法线...

int result = 0;
for(int i = 1; i < 4; i++)
{
  result = result * 10 + i;
}
Console.WriteLine(result);

这会在控制台上输出正确的result - 即123

我的问题是,为什么 result *= 10 + i; 无法正常工作 - 并且总是将 result 设为 0

【问题讨论】:

  • 为了更清楚,它的result *= (10+i);
  • 第一个是:10 + i,然后乘以0,所以它总是0。第二个是(0 * 10) + i,所以它随着每次循环迭代而增加

标签: c# multiplication compound-assignment


【解决方案1】:

这是因为操作的顺序。

result = result * 10 + i

相当于...

result = (result * 10) + i

...但是...

result *= 10 + i

与...相同

result = result * (10 + i)

【讨论】:

  • result = result * 10 + i;的复合版本是result *= 10; result += i;甚至(result *= 10) += i;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多