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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 批量下载图片

    批量下载图片

    2021年6月7日
    121
  • matlab二维彩图colormap调色_matlab如何自定义颜色

    matlab二维彩图colormap调色_matlab如何自定义颜色利用matlab构建自己的colormap这个博客是自己的第一篇博客,瞎写实验中。。。因为平时绘制多条曲线,多种颜色的散点图以及二维色彩图时,经常受colormap折磨,嫌弃matlab自带的太丑,自己想要的效果没有。所以这篇文章主要从RGB格式和HSV格式两种颜色模式去衡量构造颜色条。1.颜色模式首先说一下RBG格式,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及…

    2022年10月10日
    0
  • Total Video Converter v3.71 注册码「建议收藏」

    Total Video Converter v3.71 注册码「建议收藏」软件下载地址:http://70.38.38.52/total-video-converter/tvc.exe注册码:51D79711-859B7A14-BC88D807-8B66F050-309F2

    2022年7月3日
    62
  • 转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源

    转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源

    2022年1月10日
    47
  • centOs使用yum安装nginx「建议收藏」

    centOs使用yum安装nginx「建议收藏」1.安装nginxyuminstallnginx2.找到配置文件find/-namenginx.conf3.添加配置vinginx.conf4.基本命令nginx#启动nginx-sstop#停止nginxnginx-sreload#重启nginxnginx-c/etc/nginx/nginx.conf#使用指定配置文件启动nginxnginx-t#检测配置文件是否有错误nginx-v#查看版本信息..

    2022年6月4日
    28
  • html网页动态日历代码_春节倒计时源码

    html网页动态日历代码_春节倒计时源码点击文章下面超链接,即可免费下载,源码以及文件素材,无需积分,关注后即可下载记得关注,只有关注后才可以下载!!!效果图:钟表以及时间文字显示会自动根据打开网页的时间,显示时间;无需自己修改,弹幕和文字皆可以修改;背景是渐变色彩,可根据自己的需要在源码中修改即可,除了主要功能是HTML意外,还有CSS、JS等源码,就算没有编程工具,电脑没有任何编程配置,只需要打开文件,鼠标双击运行index即可,会自动跳到系统默认浏览器内,就算毫无编程基础、英语小白页可以娱乐;本源码意在学习与娱乐,未经授权!!禁止商用

    2022年10月19日
    0

发表回复

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

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