大家好,又见面了,我是你们的朋友全栈君。
范围区别:取模主要是用于计算机术语中。取余则更多是数学概念。
主要的区别在于对负整数进行除法运算时操作不同
那么具体是怎样的不同?
首先需要知道Java中如何取模:
-
Java中用符号%对数字进行取模,可以得到以下:
-
System.out.println(5%3); System.out.println(-5%3); System.out.println(5%-3); System.out.println(-5%-3);
-
-
运用Math类方法对其进行取模:
-
System.out.println(Math.floorMod(5,3)); System.out.println(Math.floorMod(-5,3)); System.out.println(Math.floorMod(5,-3)); System.out.println(Math.floorMod(-5,-3));
-
-
输出结果
-
上述结果证明,两个取模运算并不相同,那么 % 和 Math.floorMod 中的运算到底哪个是取模?哪个是取余?(可能根据类你已经知道结果了)
-
那么我们继续根据BigInteger封装的mod方法,remain方法进行比较:
BigInteger a = new BigInteger(String.valueOf(-5)); BigInteger mod = a.mod(BigInteger.valueOf(3)); System.out.println(mod); //BigInteger.mod()取模,结果为1 System.out.println(Math.floorMod(-5,3)); //Math取模,结果为1 System.out.println(-5%3); //%结果为-2 BigInteger remainder = a.remainder(BigInteger.valueOf(3)); System.out.println(remainder); //BigInteger.remain()取余结果为-2
-
由此可以得出一个结论:%的取模,不是实际意义上的取模,底层是取余操作。
(此处应该注意,有的同学在使用BigInteger的mod方法时,传负参数,会导致ArithmeticException的错误,public BigInteger mod(BigInteger m) 如果 m ≤ 0会导致ArithmeticException )
取余,遵循尽可能让商大的原则
—–取余:尽可能让商的绝对值更小
—–如-9rem2,-9/2=-4.5,取商为-4,。余数为-9-(2*-4)=-1
取模,遵循尽可能让商小的原则
—–取模:“向下”的意思就是说尽可能让商更小
—–如-9mod2,-9/2=-4.5,取商为-5。余数为-9-(2*-5)=1
为了方便记忆:
- a ÷ b = c ··· r
a,b 同号 时(a,b>0 || a,b<0),取模取余相同都为r
当a,b 异号时,模为 (r + b) ,余为 r
注意:在C/C++, C#, JAVA, PHP这几门主流语言中,’%’运算符都是做取余运算,而在
python中的’%’是做取模运算。
参考文献:https://blog.csdn.net/coder_panyy/article/details/73743722
https://blog.csdn.net/songsong2017/article/details/84033883
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136788.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...