模数公式

Modulus formula

我正在阅读 C++ 入门第 5 版,但我不明白为什么是这样:

The modulus operator is defined so that if m and n are integers and n is nonzero, then (m/n)*n + m%n is equal to 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

有人能解释一下这是怎么回事吗?

(m/n)*n == m (9)

你计算错了。这是 整数

9/2 == 4

运行这段代码看看你得到了预期的结果。

您没有手动验证的原因是:

(m/n)*n == m (9)

虽然在数学中是9,但在C++中是8。这是因为C++在除整数时去掉了小数部分。

不对,比如(9/4)*4,不是9!(实际上是8)

在 C 和 C++ 中,无论何时除以整数,结果仍然是整数,因此 9/4,例如,正好是 2(小数部分被截断)。由于这种截断,公式有效。