模数公式

时间:2016-08-11 10:28:26

标签: c++ algorithm modulus

我正在阅读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

有人能解释一下这里发生了什么吗?

3 个答案:

答案 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(小数部分被截断)。由于这种截断,公式起作用。