Java中的算术运算符(初学者问题)
我知道数组运算符具有优先权。然后是二元关节运算符*,/,%。然后+和 - 它们是低优先级。Java中的算术运算符(初学者问题)
但我很困惑,在这个例子中,java将首先解决哪个问题。 如果我们有2个运算符具有相同的优先级,那么将首先在java中使用哪个运算符?
谢谢。
int x = y = -2 + 5 * 7 - 7/2 % 5;
如果有人能为我解决这个问题,并逐个给我解释一下。因为这总是让我在考试中感到困惑。
如果运算符具有相同的优先级,那么它们将从左到右进行评估。
从tutorial:
当相同的优先级的 运营商出现在同一表达,规则必须 支配后者首先被计算。 除 赋值操作符之外的所有二元运算符都从左到右评估为 ;分配 运营商从右到左进行评估。
在表达,7/2 % 5
的/
和%
具有相同的优先级,所以从左到右7/2 = 3
和3 % 5 = 3
。
最高优先级赋予* /%。这里是你的例子细分:
-2 + 5 * 7 - 7/2 % 5
= -2 + (5 * 7) - (7/2 % 5)
= -2 + 35 - (3 % 5)
= -2 + 35 - 3
= 30
这正是我想知道的(从左到右!)我在Fortran75和Java之间感到困惑。 TY! – 2011-03-17 11:19:32
int x = y = -2 + 5 * 7 - 7/2 % 5;
是相同
int x = y = (-2 + ((5 * 7) - ((7/2) % 5)));
/*和%(乘法)的具有相同的优先级和它们的关联被左到右。
+和 - (添加剂)具有相同的优先级,并且它们的关联从左到右。乘法运算优于加法运算。
不完全相关,但你可能会发现这一点。它与序列点有关,它是程序中的一些点,它们本质上是编译器确保一切都同步的点。它出现在SO上,因为这个问题是什么
x = x++; // Operator prcedence and/or sequence point problem;
是做什么的?或者更糟
x[i]=i++ + 1;// sequence point problem
Why does this go into an infinite loop?
http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html
它是基于BODMAS规则 - 支架关司乘Addidition减法秩序。 – Mahesh 2011-03-17 11:12:05
如果您不确定运算符的优先级,那么只需添加额外的括号即可。它没有任何缺点,比如让代码变慢,并且在很多情况下使代码更具可读性。 – RoToRa 2011-03-17 11:14:32
非常感谢你们! SOF ROCKS !!!! – 2011-03-17 11:43:24