模式

2016-08-11 23 views
2

我在读一本C++入门第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 ==米(9)

2)M%N = = 1

3)(M/N)* N + M%N == 10 NOT 9

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

+3

'(9/2)* 2' does ** not ** equal'9'。 –

+1

你了解整数除法的工作原理吗? – taskinoor

+0

这个定义的真正罪魁祸首实际上是负整数..尝试-9 ... :)(在你首先得到整数除法的想法,就像答案指出的那样)。 – Ped7g

回答

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

你这样做的计算错了。这是整数

9/2 == 4 
+0

哦,哇,这样的错误, 谢谢 – vdublevsky

0

运行该程序,看看你得到预期的结果。

你之所以没有手动验证它是这样的:

(M/N)* N ==米(9)

虽然在数学9,在C++它是8.这是因为C++在分割整数时会丢失小数部分。例如,

0

不是,(9/4)*4不是9!(它实际上8)

在C和C++,只要您将整数,结果仍然是一个整数,所以9/4,例如,正好是2(小数部分截断了)。由于这个截断公式的作用。