a=a++;
Сначала было просто а++, потом я сделал a=(a+1)%4; и, наконец, решил вернуть как было, но промахнулся.
Долго думал, почему значение переменной в цилке не меняется. Даже когда увидел ошибку, понял не сразу.
У ++ приоритет меньше, чем у присваивания. Но это постфиксная форма. поэтому значением a++ в выражении будет старое значение a (в данном случае, ноль).
Выражение будет вычисляться следующим образом:
1. В качестве значения a++ берётся старое значение a (ноль).
2. a увеличивается на единицу (1).
3. a получает значение a++, которое равно нулю согласно пункту 1.
Таким образом, значение a дёрнулось, но после окончания вычислений вернулось обратно.