Java取余和取模

Java取余和取模抛开高级语言的实现,取余运算和取模运算本身并不完全一致,区别在于对负整数进行取商时操作不同。虽然这样说,但是取余运算和取模运算的公式都一样。对于x和y两个整数(int),通过以下两个操作获取余数或模数:step1、求商:intz=x/ystep2、求余数或模数:intresult=x-y*z它们的差别在于,如果z的值…

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

抛开高级语言的实现,取余运算和取模运算本身并不完全一致,区别在于对负整数进行取商时操作不同。虽然这样说,但是取余运算和取模运算的公式都一样。对于x和y两个整数(int),通过以下两个操作获取余数或模数:

           step1、求商:int z  = x / y

           step2、求余数或模数:int result = x – y * z

它们的差别在于,如果z的值是负数且不为整数(如果z为整数,那么余数和模数都为0了嘛)时,该怎么取整,比如z == -1.33,那么z取整的结果是 -1 还是 -2 的区别;如果为正数则没有区别。所以我们只需要注意,x和y异号,且x不被y整除的情况。

先给出规则,如果z小于0,且z不为整数(即x没有被y整除),那么:

如果是取余:那么z朝0方向取整,即:-1.33 => -1

如果是取模:那么z朝负无穷方向取整,即:-1.33 => -2

举个例子:x = -4,y = 3,x / y = -1.33…

如果是取余:那么z = -1,result == -4 – 3 * (-1) == -1

如果是取模:那么z = -2,result == -4 – 3 * (-2) == 2

所以大家不要再把取余和取模混为一谈啦!在Java中,%是取余数,取模的操作是:Math.floorMod,我们可以看一下Java的取模操作是怎么实现的(以下为java源码,只是我加上了注释):

/**
 *计算 x - z
 */
public static int floorMod(int x, int y) {
      int r = x - floorDiv(x, y) * y;
      return r;
}

/**
 * 计算z
 */
public static int floorDiv(int x, int y) {
       //这里其实是强转操作,是朝0方向取整的
       int r = x / y;
       if ((x ^ y) < 0 && (r * y != x)) {
           //如果x和y异号且x/y不是整数(也就是x没有被y整除),那么将r-1返回
           //由于r在上一步已经朝0方向取整了,将r-1就实现了朝负无穷方向取整
           r--;
       }
       return r;
}

注:不同的语言,对于%运算符的含义可能是不一样的,比如c、c++、java 为取余,而python为取模

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131177.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java匿名对象_匿名对象概念和使用

    java匿名对象_匿名对象概念和使用在千峰“逆战”学习第14天Personperson=newPerson(“骚杰”,66,‘男’);Person类名person对象名newPerson(…)像内存的堆区申请空间,创建一个Person类对象使用的内存空间匿名对象没有名字的对象,没有对象名的对象格式:new构造方法(所需参数)用途1.提高开发效率,隐形眼镜日抛,一次性筷子匿名对象当前行使用…

    2025年9月23日
    5
  • 固态硬盘有哪些协议知识点?「建议收藏」

    固态硬盘有哪些协议知识点?「建议收藏」固态硬盘的知识点固态硬盘的协议:同品牌,同型号,不同容量速度差距删除数据是真的将数据删除了吗?固态硬盘的协议:硬盘是属于NVM:Non-volatilememory非易失性存储器件。NVM的种类​接口总线协议:​我们固态硬盘一般有两种接口的固态,一种是SATA接口,一种是M.2接口的固态。SATA固态硬盘接口​M.2接口的固态:,这个有两种的接口,一种是2个金手指…

    2022年9月20日
    3
  • windows10查看端口被占用_win10端口被占用怎么解决

    windows10查看端口被占用_win10端口被占用怎么解决1、查看windows所有端口进程同时按下Win+R,接着在对话框中输入“cmd”,按下回车键打开命令提示符窗口,然后在窗口中输入netstat-ano按下回车键,之后就会显示所有的端口占用情况。2、如果是要查询指定的端口占用情况的话,可以在命令提示符窗口中继续输入netstat-aon|findstr”提示的端口”这里的提示的端口假设为8080,那么就输入命令netstat-aon|findstr”8080″按下回车键之后就可以看见列表中的PID然后.

    2022年7月27日
    19
  • git 迁出/克隆远程仓库的指定分支方法(附常用git配置命令)

    普通克隆方式:gitclone&lt;远程仓库地址&gt;这种克隆方式默认是克隆master主分支,而且通过命令gitbranch–list能看到克隆后在本地也只有这一个分支,如果再通过新建分支再拉取指定分支,甚至可能还需要解决冲突,太繁琐。那么,如何快速有效的直接克隆远程指定分支?只需要一条命令:gitclone-b&lt;指定分支名&gt;&…

    2022年4月17日
    53
  • phpMyAdmin访问远程MySQL数据库的方法

    phpMyAdmin访问远程MySQL数据库的方法

    2021年9月19日
    34
  • BigDecimal和Int类型的转换以及BigDecimal类型的运算

    BigDecimal和Int类型的转换以及BigDecimal类型的运算Int 类型转换为 bigdecimal 类型 BigDecimal nbsp price nbsp nbsp new nbsp BigDecimal card getPrice Bigdecimal 类型相加 BigDecimal nbsp newDeposit price add oldDecimal

    2025年9月29日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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