Cプログラムで以下の操作を試していました(動作を確認するため)
x = 5 % (-3);
y = (-5) % (3);
z = (-5) % (-3);
printf("%d ,%d ,%d", x, y, z);
gcc と同じ出力が得られました(2, -2 , -2)
。毎回正の結果が出ると思っていました。係数は負になることがありますか? この動作を説明できる人はいますか?
ベストアンサー1
C99 では、が表現可能な場合、次のことが要求されますa/b
。
(a/b) * b
+ a%b
等しいa
これは論理的に理にかなっています。そうでしょう?
これが何につながるか見てみましょう:
例A5/(-3)
は-1
=> (-1) * (-3)
+ 5%(-3)
=5
これは 2 の場合にのみ発生します5%(-3)
。
例B(-5)/3
は-1
=> (-1) * 3
+ (-5)%3
=-5
これは(-5)%3
、-2