取余和取模的区别

取余%取模 mod 两种运算,既有相同之处也有不同的地方

a % ba mod b 的公式都为 result = a - b * c ;c = a / b (b ≠ 0);

两者的区别是 在于 c 的计算方式

a % b 时 ,c的结果向零取整,如 a = 36, b = -10 则 c=-3;

a mod b 时,c的结果向负无穷取整,如 a = 36, b = -10 则 c=-4因为比 -3.6 小的最接近的一个整数是 -4 ;

所以 有如下的运算

36 % -10 = 36 - (-10) * c = 36 - (-10) *(-3) = 36 -30 = 6,结果为 6

36 mod 10 = 36 - (-10) * c = 36 - (-10) * (-4) = 36 -40 = -4 ,结果为 -4

更一般的规律

取余(%)运算中,运算结果的符号和被除数(a)保持一致,即 a 为正,运算的结果就为正, a 为负,运算的结果就为负

取模(mod)运算中,运算结果的符号和除数(b)保持一致,即 b 为正,运算的结果就为正, b 为负,运算的结果就为负

java 中的运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) {
System.out.println(36 % 10); //6
System.out.println(36 % -10); //6
System.out.println(-36 % 10); //-6
System.out.println(-36 % -10); //-6
System.out.println(Math.floorMod(36, 10)); //6
System.out.println(Math.floorMod(36, -10)); //-4
System.out.println(Math.floorMod(-36, 10)); //4
System.out.println(Math.floorMod(-36, -10)); //-6
}

打印结果如下
6
6
-6
-6
6
-4
4
-6

作者

Bruce Liu

发布于

2020-06-04

更新于

2022-11-12

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.