• java中求余%与取模floorMod的区别


    初学java的时候接触的%这个符号

           百分号?

           求余?

           取模?

    我只知道不是百分号,好像是求余,听别人那叫求模运算符,跟求余一样,于是我便信了。

    思考之后开始迷糊,然后经过多次考证得到以下结论。

    首先,%是求余的意思,不是求模的意思。求模不完全等于求余。

           首先我们遵守公式:

                  a = b * q + r;

                  这里的a是被除数,b是除数,q是商,r是余数也可以是模。

                  q= a/b 且 |r| < |b|

                  于是得到:

                  r = a – (a/b)*b;

    r的求值公式都是这样,那么求余和求模的区别在哪呢?

           1、

    java求余单位是%

                  java中求模使用的是Math.floorMod(被除数, 除数)方法

           2、

    求余追求的是商的绝对值最小

                  求模追求的是商的值最小

                  也就是说a/b得到的值在求余和求模中可能是不一样的,如果a/b得到的是正数,那么商的绝对值和商的值相等,求余的结果和求模的结果一致。

           当a>0,b>0 则a%b >=0 且Math.floorMod(a,b) >=0

           当a<0,b<0, 则 被除数 -(除数*商),已知商的绝对值取最小的,也就是说|被除数|>|除数*商|。所以a%b <=0 且Math.floorMod(a,b) <=0

           当ab异号 则 a/b小于0,也就是商小于0,除数小于0, r的值的正负取决于 |商*除数| 与 |被除数|的比较

           当a>0,b<0的时候

                  求余,要求商的绝对值最小,所以 |被除数|> |商*除数| ,得到值>0

                  求模,要求商的值最小,也就是 |被除数| < |商*余数| , 得到值<0

           当a<0,b>0的时候

                  求余,要求商的绝对值最小,所以 |被除数|> |商*除数| ,得到值<0

                  求模,要求商的值最小,也就是 |被除数| < |商*余数| , 得到值>0

    总结:

           当被除数和除数同号的时候,求余和取模得到的结果是相等的

           求余得到商的过程是先用绝对值求商再添上正负号

           求模得到商的过程是用绝对值求商的值+1再添正负号,能整除的除外。

           求余过程中:

                  余数的正负号取决于被除数,被除数为正则为正,被除数为负则为负

           求模过程中:

                  模的正负号取决于除数,除数为正则为正,除数为负责为负

    例子:

    public class TestMod {
        public static void main(String[] args){
            System.out.println("17模以3的值为:" + Math.floorMod(17, 3));
            System.out.println("17除以3的余为:" + 17 % 3);
            System.out.println("-17模以-3的值为:" + Math.floorMod(-17, -3));
            System.out.println("-17除以-3的余为:" + -17 % -3);
            System.out.println("-17模以3的值为:" + Math.floorMod(-17, 3));
            System.out.println("-17除以3的余为:" + -17 % 3);
            System.out.println("17模以-3的值为:" + Math.floorMod(17, -3));
            System.out.println("17除以-3的余为:" + 17 % -3);
        }
    }

    得到输出:

    本文参考:

    https://blog.csdn.net/s_p_y_s/article/details/82770611

    https://blog.csdn.net/cswhale/article/details/78602414

    https://www.cnblogs.com/jasonkoo/articles/2213763.html

    https://blog.csdn.net/wanlixingzhe/article/details/7359809

    致谢!

    注意:

           看别人博文不只是要关注博文内容,也可以关注对应的评论者留言等,不是尽信书。

  • 相关阅读:
    Android OCR 之 tesseract
    抛砖引玉 之 谁动了我的流量(0权限上传数据)
    退伍一年了
    android 通过 Hessian 与 j2ee 服务端交互
    Arduino 入手
    抛砖引玉 之 谁动了我的隐私(android用户隐私窥探)
    如何关注那些有价值的微博
    关于培训和外包20111027
    ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)
    提高你开发效率的十五个Visual Studio 2010使用技巧
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/10529387.html
Copyright © 2020-2023  润新知