2015-11-19 27 views
0

有人可以請解釋編譯器評估以下表達式的順序。結果出來到30,但我不知道如何。 根據BODMAS,如果我是正確的,應首先評估括號,然後除法,然後乘法,然後加減。但這個命令並沒有給我正確的答案。輸出是什麼? BODMAS?

public static void main(String args[]) { 
    int a = 30 - 12/(2 * 5) + 1; 
    System.out.println(a); 
} 
+1

是的。乘法必須首先發生(因爲它在括號內)。 2 * 5是10. 12/10是1(使用整數算術)。 30 - 1 + 1是30.你認爲結果是什麼?爲什麼?考慮到除法運算符的RHS包含括號內的乘法運算,您希望在乘法運算之前發生除法運算? –

回答

1

根據BODMAS,答案應該是30.

int a = 30 - 12/(2 * 5) + 1; 

支架首先評估 - 2*5 = 10

司下一 - 12/10 - 1

加/減 - 30 -1 + 1

回答 - 30

+0

當然哦!我是愚蠢的,並計算12/10爲1.2:/ 謝謝Ankur! –

+0

@JeevanKaur請接受回答 –

2

你的運算符優先級的理解是正確的。

原始表達式:

​​

首先,支架進行評估:讓我們一步打破這種表達下降步

30 - 12/10 + 1; 

然後,根據運算符優先級,*/%操作被評估。在你的情況下,你只有一個/運營商。需要注意的是,兩個操作數INT S,所以/將執行integer division,返回結果的只有「全」部分,即1

30 - 1 + 1; 

不,我們評估+ S和-期從左至右:

29 + 1; 

30; 
+0

這是我搞亂的「整體」部分。感謝您澄清Mureinik! –