> X <binop>= Y; (call this form 1) > is exactly the same statement as > X = X <binop> Y; (call this form 2) Not quite. Another part of the semantics is that "X" is evaluated ONLY ONCE. So a na"ive translation of form 1 to form 2 won't work.