I know that array operators have the precedence. Then the binary arthimetic operators * , / , % . Then + and - w开发者_如何学Pythonhich they are low precedence.
But I'm confused which one will java solve first in this example. And if we have 2 operators have the same priority, what operator will be used first in java?
Thank you.
int x = y = -2 + 5 * 7 - 7 / 2 % 5;
If someone could solve this for me and explain to me part by part. Because this always confuses me in exams.
If operators have the same precedence then they are evaluated from left to right.
From the tutorial:
When operators of equal precedence appear in the same expression, a rule must govern which is evaluated first. All binary operators except for the assignment operators are evaluated from left to right; assignment operators are evaluated right to left.
In the expression, 7 / 2 % 5
, the /
and %
have the same precedence, so going left to right 7 / 2 = 3
and 3 % 5 = 3
.
The highest precedence is given to * / %. Here is the breakdown of your example:
-2 + 5 * 7 - 7 / 2 % 5
= -2 + (5 * 7) - (7 / 2 % 5)
= -2 + 35 - (3 % 5)
= -2 + 35 - 3
= 30
y
will be assigned the value of -2 + 5 * 7 - 7 / 2 % 5
. Then x
will be assigned y
's value.
Arithmetic expression will be evaluated like:
-2 + (5 * 7) - ((7 / 2) % 5)
Here's an explanation of Java's operator precedence.
This looks like what you need to read: Java Operators Tutorial.
Read the tutorial and then write yourself an example program and play around with it until you're happy with operator precedence. It's the best way to learn.
int x = y = -2 + 5 * 7 - 7 / 2 % 5;
is same as
int x = y = (-2 + ((5 * 7) - ((7 / 2) % 5)));
/,* and % (multiplicative) are having same precedence and their association is left to right.
+ and - (additive)are having same precedence and their association is left to right.
multiplicative operations are higher precedence over additive operations.
Not entirely related, but you may find this of interest. It is to do with sequence points, which are points in a program which are essentially the points where the compiler ensures that everything is synchronised. It arose on SO because of the question what does
x = x++; // Operator prcedence and/or sequence point problem;
do? Or worse
x[i]=i++ + 1;// sequence point problem
Why does this go into an infinite loop?
http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html
精彩评论