負の数の剰余演算 質問する

負の数の剰余演算 質問する

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

おすすめ記事