在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/

10-11 21:07