Для int a, b
, я знаю, что когда есть ровно один из a
и b
отрицателен, результат a / b
и a % b
зависит от машины. Но всегда ли у меня (a / b * b) + a % b == a
, когда b
не равен нулю?
У меня всегда есть `(a/b * b) + a% b == a`, когда b не равно нулю?
Ответ 1
С++ 11 §5.6 [expr.mul]/4 указывает:
Если частное выражение
a/b
представимо в типе результата,(a/b)*b + a%b
равноa
.
C11 §6.5.5/6 указывает то же самое с несколько иной фразировкой:
Если выражение
a/b
является представимым, выражение(a/b)*b + a%b
должно быть равноa
; в противном случае поведение какa/b
, так иa%b
равно undefined.