2016-08-11 2 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 M(9)

2)m個の%を== N = = 1

3)(M/N)* N + Mの%nは== 10、NOT 9

誰かがここで何が起こっているか説明できますか?

+3

'(9/2)* 2'は** not ** equal '9'です。 –

+1

整数除算の仕組みを理解していますか? – taskinoor

+0

この定義の本当の原因は実際には負の整数です。try -9 ... :)(整数除算の考え方を得た後、答えが指摘されます)。 – Ped7g

答えて

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

この計算は間違っています。これは、あなたが期待する結果を得ることを確認するために整数

9/2 == 4 
+0

ああ、そういう間違いです、 ありがとうございました – vdublevsky

0

を実行し、このコードです。

あなたはそれを手動で確認しなかった理由はこれです:

(M/N)、それはCで、数学で9ですが* N M(9)

を== ++これは、C++が整数を分割するときに小数部分を削除するためです。

0

たとえば、(9/4)*4は9ではありません!

CおよびC++では、整数を分割するときは常に結果が整数なので、9/4は正確に2です(端数部分は切り捨てられています)。そして、この切り捨てのために、式が機能します。

関連する問題