c# - 為什麼在計算表達式時會得到錯誤的結果?




(4)

問題是關於運算符的優先級。

而表達式 int n = a.Max() + a.Sum() % 10; 被評估,

基於運算符的優先級,您可以看到加法運算是在乘法之後進行的。

為了解決這個問題,一種解決方案是使用如下括號。

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

如果可以按照運算符優先級進行查看,請使用方括號確保將其中的內容識別為表達式並首先對其求值。

您可以根據 https://docs.microsoft.com/en-us/cpp/c-language/precedence-and-order-of-evaluation?view=vs-2019 對此進行了解。

實際上,所有基於c的語言的運算符優先級都相似。

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

該代碼輸出11,但是我會期望為1,因為31%10 =1。有人可以解釋為什麼上面的代碼給出不同的答案嗎?



您應該在此處使用BOD MAS規則。 最大值= 10,所有數字的總和= 21,然後計算模式。 所以解決方案將是:

10 + 21 % 10
10 + 1 = 11

根據BOD MAS規則。


您面臨的問題是由於運算符的優先級。 % 優先級高於 + ,因此您實際上對錶達式執行的操作是:

  1. 獲取 a.Max()
  2. 得到 a.Sum() % 10
  3. 將它們加在一起

因此,結果為10 + 1,即11。

如果 a.Sum() 加法的其餘部分,而不只是 a.Sum() ,則需要使用括號: (a.Max() + a.Sum()) % 10 。 這會將評估更改為:

  1. 獲取 a.Max()
  2. 獲取 a.Sum()
  3. 將它們加在一起
  4. 除以10的餘數

結果是1。




c#  

c#