Ух ты, даже я думал, что оператор по модулю применительно к
c=a%b
ограничивает c между целыми числами [0, b-1].
Однако, как пишет K & R (стр. 39, 2-е изд):
Выражение x% y производит
остаток, когда х делится на у, и
таким образом, ноль, когда у делит х точно.
По сути, получается следующее:
c = sign(a) * ( abs(a)%abs(b) )
(где знак (a) = -1 для a <0 и +1 для a> = 0)
Было бы замечательно, если бы кто-то мог указать фактическую ссылку на это поведение в книге или стандарте Си. Это то, что я понял после экспериментов с GCC v4.4.1.
Спасибо за отличный вопрос. Вы как бы прояснили мое понимание оператора модуля C.