【发布时间】:2011-01-10 10:39:41
【问题描述】:
可能的重复:
Modulus operation with negatives values - weird thing ??
Mod of negative number is melting my brain!
我尝试 25 % -9 只是为了好玩,我得到的答案是 -2(这是在 Google 上),当我用 C 代码执行此操作时,我得到了 7。有人能解释一下为什么会有两个不同的答案吗?
【问题讨论】:
可能的重复:
Modulus operation with negatives values - weird thing ??
Mod of negative number is melting my brain!
我尝试 25 % -9 只是为了好玩,我得到的答案是 -2(这是在 Google 上),当我用 C 代码执行此操作时,我得到了 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)要求余数的结果与右操作数的符号相同。
【讨论】:
如果你以 9 为基数来考虑它,它们与 9-2 = 7 是一回事
【讨论】: