我在汇编中编写一个程序来计算数字的模数。我不需要该程序的帮助,但我需要帮助理解模数如何与负数一起使用。我研究过stackoverflow但我似乎发现了相互矛盾的结果。
另外,我想知道它是如何纯粹用数学术语工作的,而不是因为它与编程有关,所以我理解基本概念。我确实发现这个页面半有用:Modulo operation with negative numbers然而,前两个答案似乎是冲突的,现在我让自己更加困惑模数与余数之间的差异(基于该页面上给出的答案) 。并不是说他们的答案在任何方面都很差,但在这一点上,我似乎很难通过树木找到森林。
请帮我解答这些简单的问题,并用纯粹的数学术语向我解释你是如何得出答案的。此外,我不需要解释模数和余数之间的区别,因为当我查看列出的网页时,我似乎变得更加困惑。请根据模数向我解释,我可以从那里连接点;)
以下是一些例子:
-15 mod 2 = ?
15 mod -2 = ?
-4 mod 9 = ?
4 mod -9 = ?
-5 mod -9 = ?
提前感谢您的回复!
答案 0 :(得分:2)
这些案件没有明确的惯例。
请记住模数的公式:n = am + b
。通常,要求余数b
在[0..(m-1)]
区间内。这使得所有自然数字变得非常容易。
对于否定数字,有些约定希望余数在[-(m-1)..0]
区间内,有些约定在上面定义,有些则采用|b|
最小的解决方案。
因此,您必须尝试编译器或库开发人员选择的实现。
有些编程语言有两个运算符可以给你一些自由。例如,Ada有rem
和mod
。
行为:
在(n rem m)
中,余数始终具有n的符号,而在(n mod m)
中,它采用m的符号。
使用两者中较小的剩余部分的第三个惯例很少实现。