Java中的算术运算符(初学者问题)

时间:2011-03-17 11:03:17

标签: java math operators

我知道数组运算符具有优先权。然后是二元关节运算符*,/,%。然后+和 - 它们是低优先级。

但是我很困惑在这个例子中首先要解决哪个java问题。 如果我们有2个运算符具有相同的优先级,那么首先在java中使用哪个运算符?

谢谢。

int x = y = -2 + 5 * 7 - 7 / 2 % 5;

如果有人能为我解决这个问题,请逐一向我解释。因为这总是让我对考试感到困惑。

5 个答案:

答案 0 :(得分:8)

如果运算符具有相同的优先级,则从左到右对它们进行求值。

来自tutorial

  

当运营商具有同等优先权时   出现在同一个表达式中,一个规则   必须治理哪个是先评估的。   除了之外的所有二元运算符   赋值运算符被评估   从左到右;分配   运营商从右到左进行评估。

在表达式7 / 2 % 5中,/%具有相同的优先级,因此从左到右7 / 2 = 33 % 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