根据PPP中的Straustrup,第68页,这是正确的。
使用代数我可以将其缩小为
a/b * b + a%b == a
a + a%b == a, // b in numerator and denominator cancel each other
但这仍然无法解释证明。
答案 0 :(得分:2)
对于每两个整数a
和b
,你有等式
a = n * b + r;
其中n
是a
可被b
整除的次数,r
是余数。
例如,如果a
等于25
且b
等于6
,那么您可以写
a = 4 * 6 + 1
n b r
使用C ++的运算符可以像
一样编写a = a / b * b + a % b
n r
答案 1 :(得分:1)
您忽略了a
和b
是整数的事实。
具有两个整数的运算符/
将执行整数除法并丢弃余数。可以使用运算符%
计算余数。
换句话说,表达式a/b
表示b
可以作为一个整体适合多少次。并a%b
执行该操作后a
中剩下的内容。表达式a - (a % b)
的结果将不会将余数除以b
。
因此(a / b) * b
等于a - (a % b)
,它为我们提供了以下表达式(a / b) * b == a - (a % b)