可能重复:
Modulus operation with negatives values - weird thing ??
Mod of negative number is melting my brain!
我尝试25 % -9
只是为了好玩,我得到的答案是-2(这是在谷歌上)当我用C代码做到这一点时我得到7.有人能解释我为什么有两个不同的答案吗? / p>
答案 0 :(得分:7)
在C89 / 90中,任何一项结果都是允许的。你从除法和余数得到的结果需要“适合”在一起,以便(a/b)*b + a%b == a
。
从C99开始,需要使用负输入的整数除法向零截断。尽管如此,仍然需要除法和余数之间的关系。这意味着(实际上)余数运算的结果总是与左操作数具有相同的符号,因此25%-9必须产生7而不是-2。
对于它的价值,C ++遵循大致相同的路径,仅落后C几年.C ++ 98/03具有与C89 / 90相同的规则,因此对于您的输入,其余部分可以是负数或正数(但仍需要与分部的结果相配合)。从C ++ 11开始,它需要与C99相同的行为,因此25% - 9 == 7。
其他一些语言(例如Python)要求其余部分的结果与右操作数的符号相同。
答案 1 :(得分:2)
如果你在9的数学基础上考虑它,它们与9-2 = 7相同