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
致谢!
注意:
看别人博文不只是要关注博文内容,也可以关注对应的评论者留言等,不是尽信书。
java中求余%与取模floorMod的区别的更多相关文章
- C语言备忘录——取余与取模
前几天,一个小姐姐问我取余和取模有什么区别,我当时第一反应就是二者是一样的,但是小姐姐咬死说不一样.我去百度了一下还真的不一样.脑壳疼,我当初误导了多少人.所以为了帮助我记忆也为了帮助预防我误人子弟 ...
- 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)
先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...
- java 整除(/) 求余(%) 运算
1. java 整除(/) 求余(%) 运算 1.求余 System.out.println(11%2); //顾名思义就是11除2的余数-->1 System.out. ...
- Java中集合List,Map和Set的区别
Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...
- Java中的“==操作符”和equals方法有什么区别
Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的 ...
- java中,return和return null有什么区别吗?
java中,return和return null有什么区别吗? 最大的区别:return;方法的返回值必须是void!return null;方法的返回值必须不是 原始数据类型(封装类除过)和void ...
- Java中关键字continue、break和return的区别
Java中关键字continue.break和return的区别: continue:跳出本次循环继续下一次循环 break: 跳出循环体,继续执行循环外的函数体 return: 跳出整个函数 ...
- java中4种修饰符访问权限的区别及详解全过程
java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...
- Java中Compareable和Comparator两种比较器的区别
Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...
随机推荐
- java 知识点
1. java泛型 避免编译错误 (ArrayList定义时候) 避免强制类型装换 2 多态的体现 实现多态主要有以下三种方式:1. 接口实现 2. 继承父类重写方法 3. 同一类中进行方法重载 ...
- Openstack-Ceilometer-Alarm运行机制
1校验 对alarm列表进行定时监测,如果发现与设置的limit值不满足,则发出警报 监控服务分为三种:默认服务,单进程校验服务和分布式校验服务.根据配置来决定,默认配置:default Alarm状 ...
- Android-Gradle(二)
理解Gradle脚本 当然我们现在讨论的所有内容都是基于Android studio的,所以请先行下载相关工具.当我们创建一个新的工程,Android studio会默认为我们创建三个gradle文件 ...
- 软件工程实践小项目之模拟wc.exe的小程序
github源码和工程文件地址:https://github.com/Jackchenyu/Word_counts/tree/smart 基本要求:要实现wc的基本功能即文件中字符数.单词数.行数的统 ...
- 微信小程序之mpvue+iview踩坑之旅
因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...
- 第九节 JS运动应用
多物体运动框架 多个物体同时运动 例子:多个Div,鼠标移入变宽 单定时器,存在问题 每个Div一个定时器 <!DOCTYPE html> <html lang="en&q ...
- 51Nod 算法马拉松12 移数博弈
点进去发现并不是博弈QAQ 一开始考虑单调队列什么乱七八糟的发现根本做不出来 (没错我一直在想枚举最大值求次大值QAQ 不妨换个思路: 我们考虑枚举次大值求最大值 设当前为now, 设now之前第一个 ...
- 3、Kafka集群部署
Kafka集群部署 1)解压安装包 [ip101]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/app/ 2)修改解压后的文件名称 [ip101]$ mv k ...
- Centos7.4配置虚拟环境
environment Centos7.4 Python3.7 download pip isntall virtualenv create environment virtualenv enviro ...
- 处理table 超出部分滚动问题
我们有个需求是这样的,鉴于我的表达能力还是直接上原型图吧 今天主要记录上面的第四条解决过程. 首先我们的布局使用的table,当想给tbody设置高度的时候,发现不起作用.原因是table的默认是di ...