2015-11-19 28 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! –