2011-01-10 6 views
1

重複の可能性:私はちょうど楽しいし、私が得た答えを25 % -9をやってみました
Modulus operation with negatives values - weird thing ??
Mod of negative number is melting my brain!モジュラス

は-2であった(これはGoogleでした)私がCコードでこれを行ったとき、私は7を得ました。なぜ誰かが私に2つの異なる答えを説明することができますか?

+2

楽しいですか?確かにそうではありません;-) – diagonalbatman

答えて

2

あなたが9の数学的なベースでそれについて考えるようになっている場合、彼らはC89/90に= 7

+0

@Rafid:彼は "モジュロ9"等価クラスを意味すると思います。しかし、はい、奇妙な言葉遣い。 – Joey

7

9-2と同じものです、どちらかの結果が許可されました。除算および残余から得られた結果は、「適合」する必要がありましたので、(a/b)*b + a%b == aです。

C99からはゼロに向かって切り捨てるには負の入力を伴う整数除算が必要です。しかし、分割と剰余の結果の関係は依然として必要です。つまり、残りの演算の結果は、常に左のオペランドと同じ符号を持つので、25%-9は-2ではなく7を生成する必要があります。

C++は、Cの後ろにちょうど数年遅れて、ほぼ同じ道をたどった。C++ 98/03はC89/90と同じ規則を持っているので、残りの部分は負または正(しかし、それでも分割の結果と合わせる必要があります)。 C++ 11以降、C99と同じ動作が必要なので、25%-9 == 7になります。

その他の言語(例:Python)では、剰余の結果に右のオペランドと同じ符号が必要です代わりに。

+0

それは包括的かつ正解ですので、あまりにもまれです。私が見逃すのは、違うルールの根拠についての議論だけです。 Pythonのルールは、それが簡単であることを意味します。乗客3人のタクシーが10人のグループに必要なタクシーを計算し、CとC++のルールは現代のハードウェアで計算が最大限効率的であることを意味します。それでは、なぜそのようなハードウェアがあるのか​​という疑問があります。知りません。 :-) –

+0

@ Cheersandhth.-Alf:ええ、私はちょっと心配しています。特にC言語の事柄については、あなたがすでに知っているように、「PDP/7その中間エンディアン、固定小数点、36ビット算術演算で3つのゲートを節約するために、あるいは同等に不明瞭なものがあります。 –

関連する問題