模数公式
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(小数部分被截断)。由于这种截断,公式有效。
我正在阅读 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(小数部分被截断)。由于这种截断,公式有效。