Оператор %
дает остаток для целочисленного деления, так что (a / b) * b + (a % b)
всегда равен a
(если a / b
представимо; в двоичном представлении двоичного числа самое отрицательное целое число, деленное на -1, не представимо).
Это означает, что поведение %
связано с поведением /
.До C99 направление округления для отрицательных операндов определялось реализацией, что означало, что результат %
для отрицательных операндов также определялся реализацией.В C99 округление для /
стремится к нулю (десятичные дроби просто усекаются), что также фиксирует поведение %
в C99.