2016-06-30 11 views
1
I can understand 3%2 gives 1. 
As 2*1+1 so 1 is remainder.  

Why -3%2 gives -1, 3%-2 gives 1 and -3%-2 gives -1. Lot of confusion. 

誰かが説明/明確にしてください。重複したものを見つけようとしましたが、これに似ていませんでした。その非常に愚かな質問が;-)残りのオペレーターはどのように動作しますか?

+0

愚かな質問ではなく、やや頻繁に尋ねられる質問です。答えは、C標準のバージョンに依存します。リンクされた複製の中で最もアップアップされた答えを見てください。 – Lundin

+0

ありがとう@ランディン.. – sas

答えて

5

Cで%オペレータはモジュロ演算子が、剰余演算子ではない場合

わかりません。

モジュロ演算子と剰余演算子は、負の値で異なります。

剰余演算子の場合、結果の符号は被除数の符号と同じですが、モジュロ演算子の場合は結果の符号が除数と同じです。

Cのように%のBの%操作を定義:定義0(としない負inifinity側)に向かって行われ切り捨てだ0に向かって切り捨て付き整数の除算/と

a == (a/b * b) + a % b 

%を剰余演算子ではなくモジュロ演算子として使用します。

+0

ありがとう – sas

2

は、原則として、モジュロ除算は、正の数の方程式を

b * (a/b) + a%b == a

を満たさなければならない、a%bが正の数でなければならないことを意味することは明らかです。しかし、a/bが負の場合、結果はゼロに丸められます。

たとえば、a = -3, b = 2とします。我々はa/b = -1.50がゼロに向かって丸められてa/b == -1になることを知っています。上記の方程式から、それはb * (-1) + a%b == aです。 aとbを挿入すると-2 + a%b == -3が得られ、%bは-1である必要があります。

他の場合も同様です。

関連する問題