有人可以请解释编译器评估以下表达式的顺序。结果出来到30,但我不知道如何。 根据BODMAS,如果我是正确的,应首先评估括号,然后除法,然后乘法,然后加减。但这个命令并没有给我正确的答案。输出是什么? BODMAS?
public static void main(String args[]) {
int a = 30 - 12/(2 * 5) + 1;
System.out.println(a);
}
有人可以请解释编译器评估以下表达式的顺序。结果出来到30,但我不知道如何。 根据BODMAS,如果我是正确的,应首先评估括号,然后除法,然后乘法,然后加减。但这个命令并没有给我正确的答案。输出是什么? BODMAS?
public static void main(String args[]) {
int a = 30 - 12/(2 * 5) + 1;
System.out.println(a);
}
根据BODMAS,答案应该是30.
int a = 30 - 12/(2 * 5) + 1;
支架首先评估 -
2*5 = 10
司下一 -
12/10 - 1
加/减 -
30 -1 + 1
回答 - 30
当然哦!我是愚蠢的,并计算12/10为1.2:/ 谢谢Ankur! –
@JeevanKaur请接受回答 –
你的运算符优先级的理解是正确的。
原始表达式:
首先,支架进行评估:让我们一步打破这种表达下降步
30 - 12/10 + 1;
然后,根据运算符优先级,*
,/
和%
操作被评估。在你的情况下,你只有一个/
运营商。需要注意的是,两个操作数INT S,所以/
将执行integer division,返回结果的只有“全”部分,即1
:
30 - 1 + 1;
不,我们评估+
S和-
期从左至右:
29 + 1;
30;
这是我搞乱的“整体”部分。感谢您澄清Mureinik! –
是的。乘法必须首先发生(因为它在括号内)。 2 * 5是10. 12/10是1(使用整数算术)。 30 - 1 + 1是30.你认为结果是什么?为什么?考虑到除法运算符的RHS包含括号内的乘法运算,您希望在乘法运算之前发生除法运算? –