我正在阅读C ++ Primer第5版,我不明白为什么会这样:
定义模运算符,以便如果m和n是整数且n非零, 那么(m / n)* n + m%n等于m。
我决定检查一下,结果确实如此:
int m = 9;
int n = 2;
if ((m / n)*n + m%n == m)
std::cout << "true" << std::endl;
1)(m / n)* n == m(9)
2)m%n == 1
3)(m / n)* n + m%n == 10 NOT 9
有人能解释一下这里发生了什么吗?
答案 0 :(得分:2)
(m/n)*n == m (9)
你做错了。这是整数
9/2 == 4
答案 1 :(得分:0)
运行此代码以确保您获得预期结果。
您未手动验证的原因是:
(m / n)* n == m(9)
虽然在数学中它是9,但在C ++中它是8.这是因为C ++在分割整数时会掉落小数部分。
答案 2 :(得分:0)
不,(9/4)*4
,例如,不是9!(实际上是8)
在C和C ++中,无论何时除分整数,结果仍然是整数,例如9/4
正好是2(小数部分被截断)。由于这种截断,公式起作用。