初学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的区别的更多相关文章

  1. C语言备忘录——取余与取模

    前几天,一个小姐姐问我取余和取模有什么区别,我当时第一反应就是二者是一样的,但是小姐姐咬死说不一样.我去百度了一下还真的不一样.脑壳疼,我当初误导了多少人.所以为了帮助我记忆也为了帮助预防我误人子弟 ...

  2. 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)

    先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...

  3. java 整除(/) 求余(%) 运算

    1. java 整除(/)  求余(%)  运算 1.求余    System.out.println(11%2);     //顾名思义就是11除2的余数-->1    System.out. ...

  4. Java中集合List,Map和Set的区别

    Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...

  5. Java中的“==操作符”和equals方法有什么区别

    Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的 ...

  6. java中,return和return null有什么区别吗?

    java中,return和return null有什么区别吗? 最大的区别:return;方法的返回值必须是void!return null;方法的返回值必须不是 原始数据类型(封装类除过)和void ...

  7. Java中关键字continue、break和return的区别

    Java中关键字continue.break和return的区别: continue:跳出本次循环继续下一次循环 break:   跳出循环体,继续执行循环外的函数体 return:   跳出整个函数 ...

  8. java中4种修饰符访问权限的区别及详解全过程

    java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...

  9. Java中Compareable和Comparator两种比较器的区别

    Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...

随机推荐

  1. 2014年西安区域赛的几道水题(A. F. K)

    A . 问一组数能否全部被3整除 K. S1 = A, S2 = B, Si = |Si-1  -  Si-2|; 一直循环问, 出现了多少不同的数: 多模拟几组数, 可以发现和辗转相除法有很大关系 ...

  2. K8S学习笔记之ETCD启动失败注意事项

    最近搭建K8S集群遇到ETCD的报错,报错信息如下,一定要关闭防火墙.iptables和SELINUX,三个都要关闭!! Mar 26 20:39:24 k8s-m1 etcd[6437]: heal ...

  3. Linux 系统最大TCP连接数 调优

    Linux系统TCP最大连接数 Linux系统可接连接到最大的TCP连接数,高并发情况下可进行扩展加大,最大为65536. 限制最大TCP连接数 修改文件:/etc/sysctl.conf 生效命令: ...

  4. Tomcat的overview界面说明

    Tomcat的overview界面说明 一.Tomcat的overview界面 双击或者open,进入Tomcat的overview界面, 一般情况workspace的子路径为.metadata.pl ...

  5. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  6. nginx和tomcat的优化

    测试脚本(服务器414报错)#!/bin/bashurl=http://192.168.4.5/for i in {1..5000}do url=${url}v$i=idoneecho $url #a ...

  7. 论文笔记:Improving Deep Visual Representation for Person Re-identification by Global and Local Image-language Association

    Improving Deep Visual Representation for Person Re-identification by Global and Local Image-language ...

  8. Webpack与其他打包工具的区别

    webpack是一个模块化加载器兼打包工具,它同时支持AMD.CMD等加载规范.与其他模块化加载器相比,它有这些优势: 1.代码分割 webpack支持两种依赖加载:同步和异步.同步的依赖会在编译时直 ...

  9. pandas 对象中 to_pickle 方法参数命名问题,不能用frame

    这句话一直报错,经过反复排查,是命名问题,to_pickle() 参数不能是 frame,换一个名字就可以了 frame.to_pickle('examples\local_frame_pickle' ...

  10. 学习笔记69—金蝶财务软件安装教程(KIS12.3,win10)

    ****************************************************** 如有谬误,请联系指正.转载请注明出处. 联系方式: e-mail: heyi9069@gm ...