ちょっと割り込むけど
a = a++;
って、aの値を取り出してaに代入してからaをインクリメントするのか(結果インクリメントされる)
aの値を取り出してaをインクリメントしてから、先ほど取り出した値をaに代入するのか(結局値は変わらない)
言語的に決められてるのかな?