2016-08-19 60 views
-3

我正在學習並瀏覽了C#中的簡單數學運算。然而,一個可能很容易的點似乎很有趣,通常我知道如果一個整數除以另一個整數,如果第一個小於第二個整數,則它是零。所以,我看了operator precedence in C#因爲也許我有關於它的錯誤信息。那麼,Console.WriteLine((1 + 1)/2 * 3);不應該給零結果?但它給了3。有沒有關於C#錯誤知識的觀點?C中的基本數學運算#

@編輯:問題是關於我的算術。我認爲它應該是2/2 * 3然後2/6 = 0爲什麼除法發生在乘法之前?

@編輯2:這個問題可以結束。這正是關於我對運營商優先級的錯誤認識。直到現在,我在編程中都認爲它是一個真正的數學程序。我很震驚。閱讀的優勢一而再,再而不是,即使你應該爲我所知道的主題跳過已經

+3

你爲什麼期望它給0?你認爲哪裏有更大的整數除法?這個表達式在Java中至少會有相同的結果。 –

+0

請解釋爲什麼你認爲如果你加1和1(產生2),然後除以2(產生1),然後乘以3,你不應該得到3. –

+0

(1 + 1)/ 2 * 3會翻譯成2/2 * 3,然後是1 * 3,實質上是3.爲什麼最終會以0結尾? :| –

回答

2

您應該使用操作的順序。 order of operations 當你看一看,你可以看到你需要做的第一件事是在圓括號之間加上兩個。然後將它除以2.但是1 + 1是這樣的,所以第二個數字不會大於第一個。那麼你只需要乘以一個三。

所以(1 + 1)/ 2 * 3

然後2/2 * 3

最後1 * 3

正如你所看到的乘法和除法得到執行從左到右。在劃分之前不會執行乘法。

+1

感謝您的回答+1 – snr

4

答案是3。1 + 1 = 2/2 = 1 * 3 = 3 ... ..操作順序告訴我們這個

+1

感謝您的回答+1 – snr

0

爲了消除混淆,即使不需要,也可以使用圓括號。這有助於讀取您的代碼的下一個人。如果你希望答案是0,那麼a =(1 + 1)/(2 * 3)。如果你想答案是0,那麼a =(1 + 1)/(2 * 3)。這使代碼更易於閱讀,並有助於消除在複雜操作中很難找到的簡單數學錯誤。