First, evaluate the value of i. Store that on top of the stack. (0) Next, increment i (through the post-fix operator). i now equals 1. Now, perform the assignment. Assign i the value on top of the stack (0).
Now, i = 0.
Post-fix notation happens after the evaluation of the variable, but before the assignment.
Piscis Babelis est parvus, flavus, et hiridicus, et est probabiliter insolitissima raritas in toto mundo.
In my opinion, this is a terrible way to write code. As a rule of thumb, you should limit the number of side-effects (changes to values in variables) to one per line of code. I cannot think of any situation where "i=i++" would even be useful. Although, I could imagine where "a++ < b--" might be tempting, I would instead do something like this:
Of course, if the new values of a and b are needed in the body of the if statement, the increment and decrement would need to be inside the body rather than after it. However, the point is to separate these side-effects into separate statements. It will make the code much easier to read and maintain.