c99標準では、モジュロ演算の結果は第1オペランドと同じ符号を持つとされています。だから-9 % 7 = -2と9 % -7 = 2。
私は1冊の本でc89標準が実装に依存していることを読みました。だから-9 % 7降伏-2するか5??? 残りはどのくらいでしょ-9 / 7う5か?
2つの数字aとを考えてみましょうb。
商q=a/bと剰余r=a%bは方程式を満たしますa == q*b + r。
-9%7が5を生成するC89の(仮想の)実装は、-9/7が-2として計算される実装です。
数学的(除法の)除算rは、正であり、よりも小さいように制約されますb。C99は、とと同じ符号でaあり、厳密にはとの間-bであるように制約しますb。それはすべて慣例の問題です。
%演算子は次のように定義されます。
a == (a / b * b) + a % b
それで
a % b = a - (a / b * b)
剰余演算子としての%
(C99のように)/に向かって丸める場合:0
-9 % 7 == -2
あなたが-9 / 7 == -1そうしているの%は-2
-9 % 7 == -9 - (-9 / 7 * 7) + 9 == -9 + 7 == -2
モジュロ演算子としての%
/マイナス無限大に向かって丸める場合:
-9 % 7 == 5
あなたは-9 / 7 == -2そう%です5
-9 % 7 == -9 - (-9 / 7 * 7) + 9 == -9 + 14 == 5