数学:
如果你有这样的等式:
x = 3 mod 7
x 可以是 ... -4、3、10、17、...,或更一般地说:
x = 3 + k * 7
其中 k 可以是任何整数。我不知道为数学定义了模运算,但因子环肯定是。
蟒蛇:
%
在 Python 中,当您使用正值时,您将始终获得非负值m
:
#!/usr/bin/python
# -*- coding: utf-8 -*-
m = 7
for i in xrange(-8, 10 + 1):
print(i % 7)
结果是:
6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3
C++:
#include <iostream>
using namespace std;
int main(){
int m = 7;
for(int i=-8; i <= 10; i++) {
cout << (i % m) << endl;
}
return 0;
}
将输出:
-1 0 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 0 1 2 3
ISO/IEC 14882:2003(E) - 5.6 乘法运算符:
二元 / 运算符产生商,二元 % 运算符产生第一个表达式除以第二个表达式的余数。如果 / 或 % 的第二个操作数为零,则行为未定义;否则 (a/b)*b + a%b 等于 a。如果两个操作数都是非负数,则余数是非负数;如果不是,则余数的符号是实现定义的 74)。
和
74) 根据正在进行的 ISO C 修订工作,整数除法的首选算法遵循 ISO Fortran 标准 ISO/IEC 1539:1991 中定义的规则,其中商总是向零舍入。
(我找不到 的免费版本ISO/IEC 1539:1991
。有人知道从哪里得到它吗?)
该操作似乎是这样定义的:
问题:
这样定义有意义吗?
该规范的论据是什么?创建此类标准的人是否有讨论它的地方?我可以在哪里阅读有关他们决定这样做的原因的信息?
大多数时候,当我使用模数时,我想访问数据结构的元素。在这种情况下,我必须确保 mod 返回一个非负值。因此,对于这种情况,最好 mod 总是返回一个非负值。(另一种用法是欧几里得算法。因为您可以在使用此算法之前将两个数字都设为正数,所以模的符号很重要。)
附加材料:
有关模数在不同语言中的作用的长列表,请参阅Wikipedia。