Reputation: 145
I understand the difference between this operations (post-increment, pre-increment). But question: I have an expression:
int x = 4;
long y = x * 4 - x++;
The highest priority has post-unary operator, than "*" and last "-". In my opinion it will be:
long y = x * 4 - x++;
1). x++ => return 4 (save x = 5)
2). final expression: 5 * 4 - 4 = 16
But when I compile this in IDE the answer is 12
! What's a problem and where did I do smth. wrong?
Upvotes: 1
Views: 747
Reputation: 1478
EDITED
Here are the steps to evaluate the expression:
Example:
int x = 4;
int y = ++x * 5 / x-- + --x;
first we need to substitute all values of x
before evaluating the expression (substitute from left to right)
++x
-> since it is a post increment we will first increment x
before substituting, thus x
will be 5
5 * 5 / x-- + --x
-> this will be the new equation
now we will substitute x
in x--
x--
-> since it is a post decrement x
here will be substituted with 5 and after the substitution decrement x
, thus x
will be 4
5 * 5 / 5 + --x
-> this will be the new equation
now we will substitute x
in --x
--x
-> since it is a pre decrement we will first decrement x
substituting, thus x
will be 3
5 * 5 / 5 + 3
// this will be the new equation
Since there are no variables in the equation we will now evaluate the expression using PEMDAS
25 / 5 + 3
5 + 3
8
thus the result will be 8
Upvotes: 3
Reputation: 3028
long y = 4 * 4 - 4;
x will be incremented after this assignment
Everytime x is "called" with x++ it gets incremented after E.g.
int x = 1;
System.out.println(x++ + x++ * x++ + x++);
// 1 + 2 * 3 + 4
Upvotes: 3
Reputation: 12493
The left side of a subtraction is always computed before the right side because subtraction is left associative i.e. 5 - 2 - 1 is (5 - 2) - 1, not 5 - (2 - 1).
This is why the multiplication happens before the increment. Associativity determines what happens first here, not precedence.
Upvotes: 1
Reputation: 26066
Multiplication is resolved separately, so x == 4
. Incrementation occurs afterwards, so it's actually 4 * 4 - 4 == 12
and after this operation x == 5
.
Upvotes: 1
Reputation: 4574
x evaluates to 4, and x++ evaluates to 4 as well, and then gets incremented to 5. So it's essentially 4 * 4 - 4 , which gives 12 as expected.
Upvotes: 2