繁体   English   中英

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

[英]Arithmetic Operators in Java (Beginner Question)

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

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

谢谢。

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

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

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

教程

当具有相同优先级的运算符出现在同一表达式中时,规则必须控制首先计算的值。 除了赋值运算符之外的所有二元运算符都是从左到右计算的; 赋值运算符从右到左进行计算。

在表达式中, 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

y将被赋值为-2 + 5 * 7 - 7 / 2 % 5 然后x将被赋予y的值。

算术表达式的评估方式如下:

-2 + (5 * 7) - ((7 / 2) % 5)

是对Java运算符优先级的解释。

这看起来像你需要阅读的内容: Java Operators Tutorial

阅读教程,然后自己编写一个示例程序,并使用它直到您对运算符优先级感到满意为止。 这是最好的学习方式。

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

为什么会进入无限循环?

http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM