Java 取余 (remain),取模 (mod) 的 区别和运算

Java 取余 (remain),取模 (mod) 的 区别和运算Java取余(remain),取模(mod)的区别和运算范围区别:取模主要是用于计算机术语中。取余则更多是数学概念。主要的区别在于对负整数进行除法运算时操作不同那么具体是怎样的不同?首先需要知道Java中如何取模:Java中用符号%对数字进行取模,可以得到以下:System.out.println(5%3);System.out.println(-5%3);Sys…

大家好,又见面了,我是你们的朋友全栈君。

范围区别:取模主要是用于计算机术语中。取余则更多是数学概念。

主要的区别在于对负整数进行除法运算时操作不同

那么具体是怎样的不同?
首先需要知道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账号...

(0)
blank

相关推荐

  • java copyproperties_java中 BeanUtils.copyProperties的用法

    java copyproperties_java中 BeanUtils.copyProperties的用法BeanUtils提供了对java发射和自省API的包装,这里对BeanUtils.copyProperties的用法做一个小小的介绍。通过函数名可以知道,copyProperties函数是对属性进行拷贝,该函数有两个参数,一个是原始的数据,另一个是接收这些属性的数据。这里给大家介绍一个我遇到的一个坑:在不同的jar包中,该函数的两个参数的位置不一样,有一种是copyProperties(java…

  • 概率论:假设检验-t检验、卡方检验和AD-Fuller test

    概率论:假设检验-t检验、卡方检验和AD-Fuller testhttp://blog.csdn.net/pipisorry/article/details/51184556卡方检验Chi-Squarethechi-squaretestmeasuresdependencebetweenstochasticvariables,sousingthisfunction“weedsout”thefeaturesthatare…

  • Thinkphp 查询条件 and 和 or同时使用即复合查询

    Thinkphp 查询条件 and 和 or同时使用即复合查询

    2021年10月28日
  • Linux rsync同步操作和inotify实时同步 、 Cobbler装机平台 (SERVICE06—-DAY21)[通俗易懂]

    Linux rsync同步操作和inotify实时同步 、 Cobbler装机平台 (SERVICE06—-DAY21)[通俗易懂]rsync同步操作•命令用法–rsync[选项…]源目录目标目录•同步与复制的差异–复制:完全拷贝源到目标–同步:增量拷贝,只传输变化过的数据同步控制•rsync操作选项–-n:测试同步过程,不做实际修改––delete:删除目标文件夹内多余的文档–-a:归档模式,相当于-rlptgoD–-v:显示详细操作信息–-z:传输过程中启用压缩/解…

  • 计算机软件师社会需求,java软件工程师的社会环境如何?「建议收藏」

    计算机软件师社会需求,java软件工程师的社会环境如何?「建议收藏」计算机专业成功的改变了很多人的命运,很多人选择计算机培训后拥有了很体面的工作,拥有了很高的工资待遇,整个人的生活水平方面了质的改变。所以越来越多的人希望可以学习计算机,而在专业选择的过程中,JAVA专业吸引到很多求学者的关注。在对JAVA这个专业了解的过程中,JAVA软件工程师的社会环境成为了很多求学者希望了解的内容,这样才能够对这个专业具有更加全面的了解。社会的地位引起关注从JAVA专业成功就业…

  • 一张色环图教你搞定配色![通俗易懂]

    一张色环图教你搞定配色![通俗易懂]一张色环图教你搞定配色!不管是在平面设计或网页制作中,还是在平常生活中的衣服穿搭和室内装潢中,要想打造出非凡的视觉效果,合理的颜色搭配非常重要。下面介绍几种色彩搭配方案供您参考,让你轻易地一靶中的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号