模除(又称模数、取模操作、取模运算等,英语:modulo 有时也称作 modulus)得到的是一个数除以另一个数的余数。 给定两个正整数:被除数 a 和除数 n,a modulo n (缩写为 a mod n)得到的是使用欧几里德除法时 a/n 的余数。 举个例子:计算表达式 "5 mod 2" 得到 1,因为 5÷2=2...1(5 除以 2 商 2 余1);而 "9 mod 3" 得到 0,因为 9÷3=3...0;注意:如果使用计算器做除法,不能整除时,你不会得到商,而是会得到一个小数,如:5÷2=2.5。 虽然通常情况下 a 和 n 都是整数,但许多计算系统允许其他类型的数字操作,如:对浮点数取模。一个整数对 n 取模的结果范围为: 0 到 n − 1(a mod 1 恒等于 0;a mod 0 则是未定义的,在编程语言里可能会导致除零错误)。 有关概念在数论中的应用请参阅模算数。 当 a 和 n 均为负数时,通常的定义就不适用了,不同的编程语言对结果有不同的处理。 定义与余数的计算编辑
在数学中,取模运算的结果就是欧几里德除法的余数。当然也有许多其他的定义方式。计算机和计算器有许多种表示和储存数字的方法,因此在不同的硬件环境下、不同的编程语言中,取模运算有着不同的定义。 几乎所有的计算系统中,n 除 a 得到商 q 和余数 r 均满足以下式子: 然而这样做,当余数非 0 时,余数的符号仍然是有歧义的:余数非 0 时,它的符号有两种选择,一个正、一个负。[注 2] 通常情况下,在数论中总是使用正余数。但在编程语言中,余数的符号取决于编程语言的类型和被除数 a 或除数 n 的符号。 标准 Pascal 和 ALGOL 68 总是使用 0 或正余数;另一些编程语言,如 C90 ,当除数 a 和除数 n 都是负数时,C90 标准并没有做具体的规定,而是留给编译器去定义并实现[6]。 在大多数系统上 a mod 0 时未定义的,虽然有些系统定义它就等于 a。更多详情参见表格。
常见错误编辑当取模的结果与被除数符号相同时,可能会导致意想不到的错误。 举个例子:如果需要判断一个整数是否为奇数,有人可能会测试这个数除 2 的余数是否为 1: bool is_odd(int n) { return n % 2 == 1; } 但在一个取模结果与被除数符号相同的编程语言里,这样做是错的。因为当被除数 n 是奇数且为负数时, n mod 2 得到 −1,此时函数返回“假”。 一种正确的实现是测试取模结果是否为 0,因为余数为 0 时没有符号的问题: bool is_odd(int n) { return n % 2 != 0; } 或者考虑余数的符号,有两种情况:余数可能为 1 或 -1。 bool is_odd(int n) { return n % 2 == 1 || n % 2 == -1; } 记号编辑一些计算器有取模 mod() 按钮,很多编程语言里也有类似的函数,通常像 mod(a, n) 这样。 有些语言也支持在表达式内使用 "%"、"mod" 或 "Mod" 作为取模或取余操作符。 a % n 或 a mod n 或者在一些没有 mod() 函数的环境中使用等价的: (注意 'int' 事实上等价于截断函数a/n,进行了向 0 取整) a - (n * int(a/n)) 等价性编辑一些取模操作,经过分解和展开可以等同于其他数学运算。这在密码学的证明中十分有用,例如:迪菲-赫尔曼密钥交换。
性能问题编辑可以通过依次计算带余数的除法实现取模操作。特殊情况下,如某些硬件上,存在更快的实现。 例如:2 的 n 次幂的模,可以通过逐位与运算实现: x % 2n == x & (2n - 1) 例子,假定 x 为正数: x % 2 == x & 1 x % 4 == x & 3 x % 8 == x & 7 在进行位操作比取模操作效率更高的设备或软件环境中,以上形式的取模运算速度更快。[9] 编译器可以自动识别出对 2 的 n 次幂取模的表达式,自动将其优化为 用途编辑
参见编辑
脚注编辑参考文献编辑
MOD是余数吗?模除(又稱模数、取模操作、取模運算等,英語:modulo 有时也称作modulus)得到的是一个数除以另一个数的余数。
Modular arithmetic是什么意思?模算数(英语:Modular arithmetic)是一个整数的算术系统,其中数字超过一定值后(称为模)后会“卷回”到较小的数值,模算数最早是出现在卡尔·弗里德里希·高斯在1801年出版的《算术研究》一书中。 模算数常见的应用是在十二小时制,将一天分为二个以十二小时计算的单位。
Python如何取余数?在python中要实现取余操作可以使用求模运算符(%),该运算符可以将两个数相除得到其余数。 如果一个数恰好能被另外一个数据整除,则余数为0,%运算后返回结果为0。 可利用余数是否为0的特点,判断一个数是奇数还是偶数。
Mod 2是什么意思?模2运算是一种二进制算法,CRC校验技术中的核心部分。 与四则运算相同,模2运算也包括模2加法、模2减法、模2乘法、模2除法四种二进制运算。 与四则运算不同的是模2运算不考虑进位和借位,模2算术是编码理论中多项式运算的基础。 模2算术在其他数字领域中的应用也是很广泛的。
|