Рассмотрим выходные данные для total = 10
, чтобы увидеть, что второе выражение не эквивалентно.
Обратите также внимание, что третье выражение не эквивалентно первому выражению, если только total > 0
(поскольку поведение %
определяется реализацией до C99 C и определяется, но не так, как вы хочу в С99).
Предполагая, что total > 0
, первое и третье выражения эквивалентны из-за следующей математической идентичности:
(a % b) == (((a + c) % b) - c) % b
Чтобы понять почему, представьте, что выполняете операции на циферблате.