Modulo使用负数

时间:2015-04-24 11:49:40

标签: modulo modulus

我在汇编中编写一个程序来计算数字的模数。我不需要该程序的帮助,但我需要帮助理解模数如何与负数一起使用。我研究过stackoverflow但我似乎发现了相互矛盾的结果。

另外,我想知道它是如何纯粹用数学术语工作的,而不是因为它与编程有关,所以我理解基本概念。我确实发现这个页面半有用:Modulo operation with negative numbers然而,前两个答案似乎是冲突的,现在我让自己更加困惑模数与余数之间的差异(基于该页面上给出的答案) 。并不是说他们的答案在任何方面都很差,但在这一点上,我似乎很难通过树木找到森林。

请帮我解答这些简单的问题,并用纯粹的数学术语向我解释你是如何得出答案的。此外,我不需要解释模数和余数之间的区别,因为当我查看列出的网页时,我似乎变得更加困惑。请根据模数向我解释,我可以从那里连接点;)

以下是一些例子:

-15 mod 2 = ?
15 mod -2 = ?
-4 mod 9  = ?
4 mod -9  = ?
-5 mod -9  = ?

提前感谢您的回复!

1 个答案:

答案 0 :(得分:2)

这些案件没有明确的惯例。

请记住模数的公式:n = am + b。通常,要求余数b[0..(m-1)]区间内。这使得所有自然数字变得非常容易。

对于否定数字,有些约定希望余数在[-(m-1)..0]区间内,有些约定在上面定义,有些则采用|b|最小的解决方案。

因此,您必须尝试编译器或库开发人员选择的实现。

有些编程语言有两个运算符可以给你一些自由。例如,Ada有remmod

行为:

(n rem m)中,余数始终具有n的符号,而在(n mod m)中,它采用m的符号。

使用两者中较小的剩余部分的第三个惯例很少实现。