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。有人可以解释为什么上面的代码给出不同的答案吗?
问题是关于运算符的优先级。
在计算表达式时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的语言的运算符优先级都相似。
您面临的问题是由于运算符的优先级。%优先于+,因此您实际上对表达式所做的是:
a.Max()a.Sum() % 10因此,结果为10 + 1,即11。
如果您要使用加法的余数而不是仅余的a.Sum(),则需要使用括号:(a.Max() + a.Sum()) % 10。这会将评估更改为:
a.Max()a.Sum()结果是1。