Ниже приводится выдержка из книги С Майка Банахана & Brady (Link: Section 2.8.2.1). У плебса, подобного мне, нет причин сомневаться в том, что автор ошибается, если вы не предложите иное.Как выражение "(a/b) * b + a% b - a" всегда равно нулю в C для ненулевого 'b'?
Пожалуйста, расскажите мне, как на земле "(a/b) * b + a% b - a" всегда равно нулю для целых чисел, где b не равно нулю.
извлеченный текст следующим образом:
Если один из операндов отрицателен, то результат/может быть ближайший целое к истинному результата с обеих сторон, и знак результата в% может быть положительным или отрицательный. Обе эти функции определены .
Это всегда верно, что следующее выражение равно нулю:
(a/b)*b + a%b - a
, если б не равна нулю.
Обычные арифметические преобразования применяются к обоим операндам.
как примечание, оно было от реализации в C89. Поскольку C99, деление определяется как округление к 0 (и данное уравнение все еще выполняется). – mafso