C# 運算子和運算式說明以下內容并提供以下示例:
與運算子優先級和結合性無關,運算式中的運算元是從左到右計算的。以下示例演示了運算子和運算元的計算順序:
表達 評估順序 a ba, b, a b * ca, b, c, *, a / b c * da, b, /, c, d, *, a / (b c) * da, b, c, , /, d, *
問題:
當一個運算元(例如
a,b,c,d)被求值時,這意味著什么?另外,評估的順序
a, b, c, , /, d, *是什么意思?(例如)
uj5u.com熱心網友回復:
這是一個可以澄清它的任意示例:
var myPoint = new point(5,6);
var p = 10;
var result = myPoint.X myPoint.Y * p;
以下是計算機如何逐步解釋它。
5 myPoint.Y * p;
5 6 * p;
5 6 * 10;
5 60;
65;
運算子的順序很重要,因為如果您先執行加法,結果將不同 (110)。運算元的解釋順序也很重要,因為你可能有這樣的事情,例如:
var result = DoSomething() DoSomethingElse();
whereDoSomething()和DoSomethingElse()return 數值,但它們也可能改變物件的狀態,或影響彼此的結果。
例如:
private _x = 17;
private _y = 20;
private int DoSomething()
{
_y = 10;
return _x;
}
private int DoSomethingElse()
{
return _y;
}
所以在這種情況下,如果DoSomethingElse()在 之前評估結果會有所不同DoSomething()。
uj5u.com熱心網友回復:
當一個運算元(例如a、b、c、d)被求值時,這意味著什么?
沒有。a、b、c、d 不是操作/操作。一個操作不是一個值(或變數),它是一個操作。在您的示例中,a b, 是運算子。a 和 b 只是提供的值 - 運算元。他們對處理(評估)操作的順序沒有任何發言權。它們被處理。
另外,a、b、c、 、/、d、* 的求值順序是什么意思?(例如)
你不是在學校學的嗎?
并非所有操作都是平等的,這就是為什么我們需要括號“()”來創建優先級。
1 2 * 3 = ??
你怎么認為?
評估從左到右 AFTER 優先。在這種情況下,這意味著首先評估 *。
所以,這被執行(從左到右)為 2 * 3 1 = 7
在你最后的表達中:
a / (b c) * d
() 用于覆寫首先處理(評估)乘法和除法的自然順序。
a / b c * d 將處理 a/b,然后是 c*d,然后將前者除以后者。
(b c) 確保首先處理它 - a / (b c) * d 從左到右,將 b c 的結果視為一個值。
抱歉,這是我在基礎學校學到的東西——基本上當你學習數學和數學公式的基礎時,你就會了解運算的順序。
從字面上看,這根本不是一個編程問題——這是非常基本的數學理解。
給你一些與 C# 無關的鏈接來填補你在學校錯過的東西:
https://en.wikipedia.org/wiki/Order_of_operations https://www.splashlearn.com/math-vocabulary/algebra/order-of-operations
如您所見,這些鏈接都與編程無關。C# - 作為一種合適的語言 - 在規范中只是澄清了如何處理它們,因此沒有誤解,但這與數學定義的內容幾乎相同(除了在正常數學中未定義的附加操作,如 ) .
現在,值得一提的是 - 這幾乎是你需要的所有數學知識,除非你進入一些更神秘的東西,比如 3d 游戲。在實際應用中,編程確實與數學無關。
uj5u.com熱心網友回復:
運算元是數學運算的物件(請參閱此處)。所以,如果我們有a b兩個a和b是運算元,也就是說,在其上的物體的操作(在這種情況下 將被執行)。我們不能將 a 和 b 加在一起,我們首先必須評估它們的值。因此,評估運算元a只是意味著:查找已分配給 的值a。
求值順序是指執行操作的順序。有些運算先于其他運算,例如乘法先于加法。如果操作具有相同的優先級,則在 C# 中它們將從左到右執行。因此a b * c,第一步將是b * c,a然后將其結果添加到。
uj5u.com熱心網友回復:
有時即使是好的檔案也可能很難理解......
這些示例中的運算元(a、b、c、d)可以是任何變數、常量、函式呼叫等。執行順序顯示了這些運算元何時被決議以及何時將運算元應用于決議結果。
讓我們以你的第二個例子并添加一些肉:
運算式:a b * c
上述運算式的求值順序:a、b、c、*、
var stringForA = "some Text";
var stringForB = 1;
var sum = stringForA.Length b * SomeFunctionShouldReturnIntButThrowsException();
該順序告訴您首先評估 stringForA.Length,我們從 B 中取 1,然后才評估 c。當它拋出例外時,甚至沒有應用運算子,最終會出現源自 SomeFunctionShouldReturnIntButThrowsException 的例外。
讓我們假設第一個陳述句是var stringForA = null;。顯然 string.Length 會拋出一個來自“a”部分的 NullReferenceException。你甚至不會達到“c”部分的代碼拋出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376371.html
