В C89/90, либо результат был разрешен. Результаты, полученные вами от подразделения и остатка, должны были «соответствовать» вместе, чтобы (a/b)*b + a%b == a
.
Начиная с C99 для округления до нуля требуется целочисленное деление с отрицательным входом. Связь между результатами разделения и остатка все еще требуется. Это означает, что (по сути) результат операции остатка всегда имеет тот же знак, что и левый операнд, поэтому 25% -9 должен давать 7, а не -2.
Для того, что стоит, C++ следовал примерно по тому же пути, всего через несколько лет. C. C++ 98/03 имеет те же правила, что и C89/90, поэтому для ваших входов остаток может быть отрицательным или положительным (но все же необходимо сочетаться с результатом разделения). Начиная с C++ 11, он требует того же поведения, что и C99, поэтому 25% - 9 == 7.
Некоторые другие языки (например, Python) требуют, чтобы результат из остатка имел тот же знак, что и правый операнд вместо.
развлечения? Наверняка нет ;-) – diagonalbatman