初学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 classTestMod {

public static voidmain(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);

}

}

得到输出:

本文参考:

致谢!

注意:

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

mod java 求余_java中求余%与取模floorMod的区别相关推荐

  1. java double 取余_java中double除法和取余的若干注意

    1 整数除法中,除数为0,抛出一个算术异常ArithmeticException.整数取余运算中,除数为0,抛出一个ArithmeticException异常. 如: class Test { pub ...

  2. java除数取余_Java中的相除(/)和取余(%)的实现方法|chu

    取模运算与取余运算两个概念有重叠的部分但又不完全一致.主要的区别在于对负整数进行除法运算时操作不同. 对于整形数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商 c = a / b: 2. ...

  3. java除余_Java中的相除(/)和取余(%)的实现方法

    取模运算与取余运算两个概念有重叠的部分但又不完全一致.主要的区别在于对负整数进行除法运算时操作不同. 对于整形数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商 c = a / b: 2. ...

  4. java 取模 与 取余_Java中的取模、取余和位移

    1.取模 (a mod b) System.out.println("10 mod 3 = " + Math.floorMod(10, 3)); System.out.printl ...

  5. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  6. double java 精度丢失_java中double和float精度丢失问题及解决方法

    在讨论两位double数0.2和0.3相加时,毫无疑问他们相加的结果是0.5.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void te ...

  7. java右移位_java中的左移 右移

    1. 左移运算符 左移运算符< 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果 ...

  8. scilab 求微分_scilab中求积分

    scilab中求一元积分函数:intg(a,b,f) 函数格式:[v,err]=intg(a,b,f [,ea [,er]) 不过在scilab中求一元积分常用命令y=intg(a,b,f) 这里的积 ...

  9. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信

    你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...

  10. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

最新文章

  1. python语言视频-Python语言之Python3 实现简易局域网视频聊天工具
  2. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!
  3. 一个简单的FreeMarker案例
  4. SQL基础整理——例题
  5. maven打包指定main函数
  6. linux下面调试C、C++
  7. etcd nginx 容器_Etcd+Confd实现Nginx配置文件自动管理
  8. 让ie8按照ie7 的方式来进行解析
  9. 几个常用的产品原型设计工具
  10. BCH的51攻击与防守
  11. C语言程序设计勾股数,打印出100内的所有的勾股数(用C语言实现)
  12. 信用,在中国究竟值多少钱?
  13. OpenCV学习01-加载、修改、保存图像
  14. python为什么打不开py文件_python文件打不开如何解决
  15. 前端自动化测试基础-sinon篇章
  16. pikachu靶场SQL,sqlmap解法
  17. 医疗器械——与研发有关的法律法规和标准——共勉
  18. C语言实现音乐播放器 visual studio 2019
  19. 记录一个问题:$router.push在setTimeout中的使用,显示找不到push
  20. html tab顶部吸附,flutter,SliverPersistentHeader实现Tab顶部吸附固定效果

热门文章

  1. matlab基本图形处理实验,MATLAB数字图像处理实验讲义(指导书)
  2. request.form 和 Request.QueryString 区别
  3. js中去除字符串中所有的html标签
  4. mac设置多个屏幕显示的问题
  5. 2016-2017-2 《Java 程序设计》课堂实践项目
  6. Greenrobot-EventBus源码学习(四)
  7. 利用iptables实现SNAT及DNAT
  8. Mac OS 电信3G上网设置
  9. 脚本实现为一系列账号生成随机密码
  10. 解决PowerDesigner 错误:Invalid repository user or password!