不同的编程语言中的
%
的含义也不一样,如 Python 是取模, Java 是取余。
注意:除数与被除数的符号相同的时候,两者结果一样
以下仅探讨两者符号不同时的区别(由于它们取商值不同,所导致的)
如果有两个整数 a 和 b ,则 a mod b ,需要满足 a = b * q + r ,q 为商, r 为结果
取模运算( mod )
取模是计算机中的概念
取模结果的符号与除数的符号相同
取模运算的商尽可能向负无穷靠近
# python 代码
num_1 = 5
num_2 = -2
print(num_1 % num_2) # 输出为 -1
过程解析
- q = ⌊ num_1 / num_2 ⌋ 其中 ⌊ ⌋ 符号为向下取整 ,得出 q = -3
- 由 a = b * q + r , 得出 r = -1
取余运算( rem )
取余是数学中的概念
取余结果的符号与被除数的符号相同
取余运算的商尽可能向 0 靠近
public class Main {
public static void main(String[] args) {
int num_1 = 5;
int num_2 = -2;
System.out.println(num_1 % num_2); // 输出 1 (与被除数符号相同)
}
}
过程解析
- q = ⌈ num_1 / num_2 ⌉ 其中 ⌈ ⌉ 符号为向上取整,得出 q = -2
- 由 a = b * q + r ,得出 r = 1
不同的编程语言中 % 有着不同含义:
取模 | 取余 |
---|---|
Java C++ Kotlin PHP C Go SQL | Python Lua Ruby |