取模和取余是两个东西来的(此处用java语言来解释)
在了解取模和取余的区别之前,首先分别对两个计算的原理解释一下!
首先假设有两个int类型变量 A和B。
int A=-3;
int B=5;
再进行如下操作
取余:
代码实现:
int A=-3;
int B=5;
System.out.println(A%B);
// 结果是-3
%(取余号)计算原理:
补充:里面的n就是 A除B.
注意:取整的方式理解很重要,等下方便理解转换原理。
好了将完取余的原理之后,我们再来学习取模的原理
取模(mod):
代码实现:
int A=-3;
int B=5;
System.out.println(Math.floorMod(A,B));
// 结果为2
Math.floorMod(),这个是取模计算的方法使用,
它计算原理:
取余和取模的区别:
造成结果不一样,就在于取整得方式不同。
由于A除B是负数,取余应该是向上取整,而取模是向下取整,这就导致两个结果不同了
但是,当A除B是正数的时候,取余和取模都是向下取整,那么这两个结果是相同了,验证一下:
代码实现:
把A的-3改为3 则A除B就变为整数了
int A=3;
int B=5;
System.out.println(A%B);
// 结果为3
System.out.println(Math.floorMod(A,B));
// 结果也3
手动计算:
取余转换成取模(前提是 |A| <|B| )前提条件是保证A的绝对值比B的绝对值小
改变的思路:
再这之前我们已经知道了,导致取余和取模得数不同的原因找到了
只需要揪着这个点去想出转化方法,只需要在取余的式子,稍微改动一下就可以了
代码实现
用回最开始的 A除B为负数的
int A=-3;
int B=5;
System.out.println((A+B)%B);
// 结果为2
System.out.println(Math.floorMod(A,B));
// 结果也2
能发现我在哪里做了改动了吗,就是在A的基础上加多了一个B,就成功实现了把取余改成了取模了
原理:
这个转化的使用
条件:保证: |A| <|B|