带负数的模数

时间:2011-01-10 10:39:42

标签: c math

  

可能重复:
  Modulus operation with negatives values - weird thing ??
  Mod of negative number is melting my brain!

我尝试25 % -9只是为了好玩,我得到的答案是-2(这是在谷歌上)当我用C代码做到这一点时我得到7.有人能解释我为什么有两个不同的答案吗? / p>

2 个答案:

答案 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相同