これって動くか?
a = (0 <= a) ? a % max : max-1 - ((-a) % max);