Возможный дубликат:
Оператор С++% гарантирует
В С++ 98/03
5.6-4
Двоичный/оператор дает частное, а двоичный оператор% дает остаток от деления первого выражения на второй. Если второй операнд/или% равен нулю, поведение undefined; в противном случае (a/b) * b + a% b равно a. Если оба операнда неотрицательны, то остаток неотрицателен; если нет, то знак остаток определяется реализацией.
В С++ 11:
5.6 -4
Двоичный/оператор дает частное, а двоичный оператор% дает остаток от деления первого выражения на второй. Если второй операнд/или% равен нулю, поведение undefined. Для интегральных операндов оператор/дает алгебраическую фактор с любой дробной частью, отброшенной; 81, если частное a/b равно представимый в типе результата, (a/b) * b + a% b равен a.
Как вы видите, что реализация, определенная для бита знака, отсутствует, что с ним происходит?