Bojan Knezovic

Ranch Hand

Posts: 90

Michael Morris

Ranch Hand

Posts: 3451

posted 13 years ago

It is evaluated left to right:

1. y = x++ (At this point y = -1 and x now equals 0)

2. y = y + ++x (Now y = 0 and x = 1)

1. y = x++ (At this point y = -1 and x now equals 0)

2. y = y + ++x (Now y = 0 and x = 1)

*Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction.* - Ernst F. Schumacher

Adrian Pang

Ranch Hand

Posts: 40

posted 13 years ago

Just a guess, I think here's what happened:

x=-1

y=x++ + ++ x; // x= -1

x++ has the most precedence, so it becomes:

y= (-1) + ++x; // x = 0

++x is next:

y = (-1) + (1);

therefore the result is 0.

It is interesting to compare this with:

x = -1;

x += x++;

Which will give -2, in my mind the += operator works like:

int tmp = x;

x = tmp + x++;

Hope this helps and the above is correct...

Adrian

x=-1

y=x++ + ++ x; // x= -1

x++ has the most precedence, so it becomes:

y= (-1) + ++x; // x = 0

++x is next:

y = (-1) + (1);

therefore the result is 0.

It is interesting to compare this with:

x = -1;

x += x++;

Which will give -2, in my mind the += operator works like:

int tmp = x;

x = tmp + x++;

Hope this helps and the above is correct...

Adrian

SCJP 1.4, SCWCD 1.4, SCBCD 1.3

Bojan Knezovic

Ranch Hand

Posts: 90

posted 13 years ago

I thought x gets inceremented only AFTER the = operator (for #1, x++), isn't that what's pre and postfix notation all about... Oh well... :roll:

I thank you and Adrian.

Originally posted by Michael Morris:

It is evaluated left to right:

1. y = x++ (At this point y = -1 and x now equals 0)

2. y = y + ++x (Now y = 0 and x = 1)

I thought x gets inceremented only AFTER the = operator (for #1, x++), isn't that what's pre and postfix notation all about... Oh well... :roll:

I thank you and Adrian.