x is set to 20 and y is set to 35.
in the next line you make x a result of 20+35 and THEN you increase
both x and y. It means x should be 56 and y 35.
There is no defined time when side effects will occur in relation to
other events within the current interval between sequence points. What
might be guaranteed is:
1 - x++ is evaluated (yielding 20).
2 - y++ is evaluated (yielding 35).
3 - At some point during or after the evaluation of x++, the
side effect of incrementing x occurs.
4 - At some point during or after the evaluation of y++, the
side effect of incrementing y occurs.
5 - At some point after both x++ and y++ are evaluated, the +
operand is evaluated (yielding 55).
6 - At some point after the + operand is evaluated, the sum is
stored in x.
The ordering of 1 and 2 is unspecified. 1 must occur before 3, 2
before 4, 1 and 2 before 5, and 5 before 6. Notice that there is no
relationship in the sequencing of 3, 4, and 6. In any sequence where
3 occurs before 6, x will end up containing 55. In any other
sequence, x may end up containing 21 (since the value being
incremented was determined to be 20) or may end up containing 56
(since the current value of x is 55).
Your subsequent test of a particular system proves nothing.
Then you increase x (57) and y (36) and y = y + x will make y to be
set to 93.
But you don't know which of three plausible values x contains at this
point. Since the behavior is explicitly undefined in the standard,
there are a lot of other values x could contain or this statement
might not even be executed.