*、/ 和 % 的定义如何保证 a/b * b + a%b == a

How do the definitions of *, / and % guarantee that a/b * b + a%b == a?

本文关键字:a%b 何保证 定义      更新时间:2023-10-16

根据Straustrup在PPP中的说法,这是正确的,第68页。

使用代数我可以将其简化为

   a/b * b + a%b == a
     a     + a%b == a,  // b in numerator and denominator cancel each other

但这仍然不能解释证据。

对于每两个整数ab你有方程

a = n * b + r;

其中na可以被b整除的次数,r是余数。

例如,如果a等于25b等于6那么你可以写

a = 4 * 6 + 1
    n   b   r

使用 C++ 的运算符,您可以像

a = a / b * b + a % b
      n           r

您省略了ab是整数的事实。

具有两个整数的运算符/将执行整数除法并丢弃余数。余数可以用运算符%计算。换句话说,表达a/b表示b可以作为一个整体容纳多少次。并a%b执行该操作后a会剩下什么。表达式的结果a - (a % b)不会留下任何余数被除以b。所以(a / b) * b等于a - (a % b),这给了我们以下表达式(a / b) * b == a - (a % b)