在C程序中,我正在尝试以下操作(只需检查行为)
x = 5 % (-3);
y = (-5) % (3);
z = (-5) % (-3);
printf("%d ,%d ,%d", x, y, z);
给了我gcc中的
(2, -2 , -2)
输出。我每次都期待一个积极的结果。模数可以为负吗?有人可以解释这种行为吗? 最佳答案
C99要求在a/b
可表示的情况下:(a/b) * b
+ a%b
应等于a
从逻辑上讲,这是有道理的。对?
让我们看看这会导致什么:
示例A. 5/(-3)
是-1
=> (-1) * (-3)
+ 5%(-3)
= 5
仅当5%(-3)
为2时才会发生这种情况。
示例B. (-5)/3
是-1
=> (-1) * 3
+ (-5)%3
= -5
仅当(-5)%3
为-2
时才会发生
关于c - 负数模运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11720656/