为什么在计算表达式时会得到错误的结果?

use*_*058 4 c#

int[] a = {5, 6, 10}
int n = a.Max() + a.Sum() % 10;
Console.Write(n);
Run Code Online (Sandbox Code Playgroud)

该代码输出11,但我会期望为1,因为31%10 =1。有人可以解释为什么上面的代码给出不同的答案吗?

Pas*_*ara 6

问题是关于运算符的优先级。

在计算表达式时int n = a.Max() + a.Sum() % 10;

基于运算符的优先级,您可以看到加法运算是在乘法之后进行的。

在此处输入图片说明

为了解决这个问题,一种解决方案是使用如下括号。

int n = (a.Max() + a.Sum()) % 10;

如果可以按照运算符优先级进行查看,请使用方括号确保将其中的内容识别为表达式并首先对其求值。

您可以根据https://docs.microsoft.com/zh-cn/cpp/c-language/precedence-and-order-of-evaluation?view=vs-2019对此进行了解。

实际上,所有基于c的语言的运算符优先级都相似。


Lua*_*aan 5

您面临的问题是由于运算符的优先级。%优先于+,因此您实际上对表达式所做的是:

  1. 得到 a.Max()
  2. 得到 a.Sum() % 10
  3. 将它们加在一起

因此,结果为10 + 1,即11。

如果您使用加法的余数而不是仅余的a.Sum(),则需要使用括号:(a.Max() + a.Sum()) % 10。这会将评估更改为:

  1. 得到 a.Max()
  2. 得到 a.Sum()
  3. 将它们加在一起
  4. 除以10的余数

结果是1。