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