我知道数组运算符具有优先权。然后是二元关节运算符*,/,%。然后+和 - 它们是低优先级。
但是我很困惑在这个例子中首先要解决哪个java问题。 如果我们有2个运算符具有相同的优先级,那么首先在java中使用哪个运算符?
谢谢。
int x = y = -2 + 5 * 7 - 7 / 2 % 5;
如果有人能为我解决这个问题,请逐一向我解释。因为这总是让我对考试感到困惑。
答案 0 :(得分:8)
如果运算符具有相同的优先级,则从左到右对它们进行求值。
来自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
答案 1 :(得分:3)
y
将被赋予-2 + 5 * 7 - 7 / 2 % 5
的值。然后x
将被赋予y
的值。
算术表达式的评估方式如下:
-2 + (5 * 7) - ((7 / 2) % 5)
Here's解释Java的运算符优先级。
答案 2 :(得分:2)
这看起来像您需要阅读的内容:Java Operators Tutorial。
阅读教程,然后自己编写一个示例程序并一直使用它,直到您对运算符优先级感到满意为止。这是最好的学习方式。
答案 3 :(得分:1)
int x = y = -2 + 5 * 7 - 7 / 2 % 5;
与
相同int x = y = (-2 + ((5 * 7) - ((7 / 2) % 5)));
/,*和%(乘法)具有相同的优先级,并且它们的关联从左到右
+和 - (加法)具有相同的优先权,它们的关联从左到右。乘法运算优先于加法运算。
答案 4 :(得分:0)
并非完全相关,但您可能会感兴趣。它与序列点有关,序列点是程序中的点,它们本质上是编译器确保所有内容都同步的点。它出现在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