簡體   English   中英

C#中的運算符優先級

[英]Operator precedence in C#

(int)(int1 / (float)var2.Count() * 100)

相當於

(int)((int1 / (float)var2.Count()) * 100)

...它會使用浮點數還是整數除法?

編輯...如果上面的答案是肯定的,那么在這里執行浮點除法有什么好處?

/*具有相同的運算符優先級,在§7.2.1下,因此兩個結果應該相同(使用float規則)。

但是,我不能為學習優先表而煩惱; 我只是使用括號。 然后它可以使用任何語言,而無需記住它。

另一個重要的問題是在最終(int)演員陣容中的四舍五入:你是否期望成為“向上”,“向下”或“銀行家”?

優先規則真的很難記住,所以我也更喜歡使用括號來消除歧義。 我嘗試遵循建議“先為人們編寫代碼,然后再為計算機編寫代碼”。 但是,有一個有趣的助記符(我從Bruce Eckel的書中學到的)要記住(一些)規則:“ Ulcer Addicts真的很像CA很多 ”:

Ulcer   - Unary (+, -, ++, --, !)
Addicts - Arithmetic (and shift) (+, -, *, /, %, <<, >>)
Really  - Relational (<, >, ==, <=, >=, !=)
Like    - Logical (and bitwise) (&&, ||, &, |, ^)
C       - Conditional ( ? : ) <- this is the conditional ternary operator
A lot   - Assignment ( =, *=, +=, ...)

它並不完美,按位運算符被擠入,我們必須知道乘法運算符(*,/,%)優先於加法運算符(+, - )。

它們是等價的,它將使用浮點除法。 即使乘法首先發生,也會使用浮點除法,因為int除以float * int的結果,即浮點數。

編輯:

如果上面的答案是肯定的,那么在這里執行浮點除法有什么好處?

這是一個優勢嗎? 你應該考慮的第一件事是它是否正確,因為結果會有所不同。 從代碼來看,你似乎在試圖計算一些百分比。 使用整數除法時,如果“int1”總是小於var2.Count(),則結果將始終為0,這可能不是您想要的。

我會說是的,除法和乘法應該是從左到右。 因此它是一個浮動部門。

PS:盡可能用double替換float

請參閱C#語言規范: 運算符優先級和關聯性

一樣的。 兩者都將使用浮動分割。

是的,都是等價的。

兩者都將使用浮點除法。

整數除法只會給出答案的整個部分,即3/2將為1而浮點除法將給出1.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM