转载请注明出处,谢谢!

下面直接上图吧,稍后解释关于mod和remainder以及负数求余求模的区别。

mod是模运算,remainder是求余运算,如果被除数是正整数,mod和remainder的结果没区别。mod运算除数只能为正数。

取模运算(“Modulo Operation”)和取余运算(“Complementation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于计算机术语中。取余则更多是数学概念。

假设有式子a ÷ b = c ··· r

当a和b符号一致时的情况:a,b均大于0时,求模运算和求余运算所得的c的值一致,r >= 0。a,b均小于0时,只能进行求余运算,因为求模运算除数b必须为正,r也是大于等于0。

当a和b符号不一致时,c不一样,r也不一样。

求余运算结果,r不为0时, r 的符号和a一致。即余数符号和被除数符号必须相同。

求模运算结果,r不为0时,r 的符号和b一致,而因为求模运算时,b必须大于0,所以r一定大于等于0,即模运算的结果一定是非负数。

我们来从java的BigInteger源码来看看实现,当b小于等于0时会出现什么情况,假设这里r = a.mod(b),那么b必须为正数,否则报异常

Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive

来看mod源码:

    public BigInteger mod(BigInteger m) {// signum是此BigInteger的符号:-1表示负数,0表示零,或1表示正数。// 请注意,BigInteger零必须具有0的符号。这对于确保每个BigInteger值只有一个表示是必要的。if (m.signum <= 0)throw new ArithmeticException("BigInteger: modulus not positive");BigInteger result = this.remainder(m);return (result.signum >= 0 ? result : result.add(m));// 可以看出mod和remainder的区别就在于,mod的模必须为正,否则异常,并且取余的值小于0点话还要加上模数m}

比如   -14 ÷ 3 = -4 ··· -2(余数符号和被除数符号必须相同

余数就是-2,这里如果是remainder取余运算,-14 remainder 3 = -2,结果是-2

如果是mod模运算,在remainder基础上判断正负,这里-2是负数,加上模数(可认为是除法的除数),这里加上3,mod模运算结果就是1,-14 mod 3 = 1

-10 ÷ 3 = -3 ··· -1

余数就是-1,这里如果是remainder取余运算,-10 remainder 3 = -1,结果是-1

如果是mod模运算,在remainder基础上判断正负,这里-1是负数,加上模数(可认为是除法的除数),这里加上3,mod模运算结果就是2,-10 mod 3 = 2

7 ÷ -3 = -2 ··· 1

余数是1,除数是负数,这里只能取模运算remiander 7 remainder -3 = 1,结果是1。但是这里余数居然大于除数了!!!!

所以可以这么说,我们小学所学的余数一定小于除数这个结论是针对除数为正数而言。并且由前两个例子也可以看出,取模运算的值也一定小于除数,前提条件是除数为正才能取模。

如果被除数是0,不管是取模还是取余结果都是0。

0%-5=0

0mod3=0

0remainder-3=0

......

如果不是大整数,只是普通的int型,比如System.out.println(5 % -3);

打印出来是2

所以java中,%是求余运算,而不是取模运算。

另外各个环境下%运算符的含义不同,比如c/c++,java 为取余,而python则为取模。

=================Talk is cheap, show me the code=================

java的BigInteger里面的mod和remainder区别相关推荐

  1. 理解Java集合框架里面的的transient关键字

    2019独角兽企业重金招聘Python工程师标准>>> 在分析HashMap和ArrayList的源码时,我们会发现里面存储数据的数组都是用transient关键字修饰的,如下: H ...

  2. java异步框架feed,Java:IO流里面的BuffeedReader

    键盘输入数据的标准格式 代码如下: import java.io.BufferedReader; import java.io.InputStreamReader; /** * 键盘输入数据的标准格式 ...

  3. java中map里面的key按我们插入进去的顺序输出

    TreeMap的顺序是自然顺序(如整数从小到大),也可以指定比较函数.但不是插入的顺序. 用LinkedHashMap吧.它内部有一个链表,保持插入的顺序.迭代的时候,也是按照插入顺序迭代,而且迭代比 ...

  4. http 里面的post和get区别

    区别: 还有就是请求包的个数:get 是1个 httpheader+data ,post是两个,先http header,再data 在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可 ...

  5. C++的类和C里面的struct有什么区别

    关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化 如果没有定义构造函数,struct可以用大括号初始化. 如果没有定义构造函数,且所有成员变量全是publi ...

  6. JAVA里面的int类型 和Integer类型,有什么不一样

    JAVA里面的int类型 和Integer类型,有什么不一样 原创 2013年09月04日 23:15:11 标签: java / 2120 编辑 删除 JAVA里面的int类型 和Integer类型 ...

  7. 07 - java 方法里面的 return

    Java 方法里面的 return return 之函数返回值 public static int sum(a, b) {return a + b; } return 之结束方法 Scanner sc ...

  8. Java千百问_01基本概念(003)_J2EE里面的2是什么意思

    J2EE里面的2是什么意思 J2SE,J2SE,J2ME中2的含义要追溯要1998年. 1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三 ...

  9. Simple java里面的paint(Graphics g)的理解

    以前写画图板时,总不理解什么时候要调用这个方法,老师说:你写了paint(g)方法后,在窗体改变时,就会调用,可是不太理解. 没写paint(g)的演示:画图板v1 1:绘制简单直线 2.执行最小化操 ...

最新文章

  1. 【转】判断UIViewController是否正在显示
  2. java args例子_Spring AOP中使用args表达式的方法示例
  3. 搭建docker私有仓库
  4. 关于storm0.10.0版本的一个小bug
  5. Scala学习思维导图
  6. C语言如何设计随机数
  7. 2060年未来人KFK的问答
  8. iOS 超好用的本地视频播放器推荐!
  9. 基于生物特征密钥生成研究 ------应用于区块链领域密钥的生成办法
  10. 滑窗优化、边缘化、舒尔补、FEJ及fill-in问题
  11. 《A Survey on Aspect-Based Sentiment Analysis: Tasks, Methods, and Challenges》阅读笔记
  12. word2016(office 365)中安装mathtype相关问题及解决办法
  13. FlashVml2.0(WEB上的PhotoShop+Flash、VML最强开发工具)
  14. 计算机基础操作测试题,计算机基础操作练习题.pdf
  15. TOF,双目,结构光,激光雷达等传感器及相关技术
  16. 手机控制树莓派linux,使用安卓手机控制树莓派
  17. golang使用yara库go-yara
  18. 22-JavaScript 冒泡事件、事件捕获、默认事件、事件委托 DAY18(5.5)
  19. Instant Client package is required for Baic and TNS connection
  20. .NET 请求被挂起,前端轮询,委托

热门文章

  1. 【C++项目】基于Cocos2d-x 4.0的 植物大战僵尸 Plants vs Zombies
  2. 抢鞋软件bot服务器系统,自动抢鞋软件bot
  3. IE11兼容性问题——网站提示“打印插件只支持IE浏览器”
  4. 同济大学计算机学院徐老师,罗怡桂 - 师资队伍 - 同济大学软件学院
  5. Jmeter自定义Java请求
  6. 快速通过PMP和软考高级
  7. 华为P30Pro手机多摄像头变焦本质 + 拍照原理深度解析 + 单反微单Vs手机
  8. HDU 3265(矩形面积并-分割矩形)
  9. Go语言channel探究
  10. 微信视频号+QQ“小世界”,腾讯围剿抖音