关于取模和取余,网上误人的帖子太多了,也没讲清楚,越看越懵,经过多方查阅和自己的证实,现将正解归纳如下:
计算方法
对于整数 A ,B
取模和取余的运算过程相同:
- 求商:C = A / B
- 计算模或者余数:R = A - C * B
取模和取余的区别仅仅是在计算C的时候不同:
取余计算时:C 值向0方向取整,比如:
C = A / B = 7 / 4 = 1.75 ,向0方向取整,则C取 1 ,则取余R = A - C * B = 3
C = A / B = -7 / 4 = -1.75 ,向0方向取整,则C取-1, 则取余R = A - C * B = -3
C = A / B = -7 / -4 = 1.75 ,向0方向取整,则C取 1, 则取余R = A - C * B = -3
取模计算时:C 值向负无穷方向取整,比如:
C = A / B = 7 / 4 = 1.75 ,向负无穷方向取整,则C取1, 则取模R = A - C * B = 3
C = A / B = -7 / 4 = -1.75 ,向负无穷方向取整,则C取-2,则取模R = A - C * B = 1
C = A / B = -7 / -4 = 1.75 ,向负无穷方向取整,则C取1, 则取模R = A - C * B = -3
总结:
1.当两个数的符号相同,即同为负或者同为正时,取余和取模结果相同,因为C偏向同一个方向取值,使得C值一样。
2.符号不同时,取余结果的符号和分子一致,取模结果的符号和分母一致。
3.Java 中的取余运算是 %,而取模运算是 Math.floorMod() 。
Java 代码验证
public class test {
public static void main(String[] args) {
System.out.println("------Complementation------");
System.out.println(7 % 4);
System.out.println((-7) % 4);
System.out.println(7 % (-4));
System.out.println((-7) % (-4));
System.out.println();
System.out.println("------Modulo Operation------");
System.out.println(Math.floorMod(7, 4));
System.out.println(Math.floorMod(-7, 4));
System.out.println(Math.floorMod(7, -4));
System.out.println(Math.floorMod(-7, -4));
}
}
输出结果:
------Complementation------
3
-3
3
-3
------Modulo Operation------
3
1
-1
-3