余数

本篇博客在于理清比较困扰的负数求余运算或者取模运算!!!!

1、基本概念

余数,数学用语。在整数的除法中,只有能整除与不能整除两种情况。当不能整除时,就产生余数,取余数运算:a mod b = c(b不为0) 表示整数a除以整数b所得余数为c,如:7÷3 = 2 ······1。

百度百科对余数的解释:

https://baike.baidu.com/item/%E4%BD%99%E6%95%B0/6180737?fr=aladdin

以下为在网上搜索及自己理解所整理!!!!!!!!!!!!

2、通常余数求取的理解

变量说明:

n:num,表示一个整数,在这里代表被除数(dividend)

q:quotient,表示两数相除的商

d:divisor,表示除数,为非0整数

r:remainder,表示余数

这四者满足以下关系:

  • a = q*d+r
  • 0 <= |r| < |d|

通常会有正余数r1与负余数r2两个余数,且满足:

  • |d| = |r1| + |r2|

在计算机语言中,

同号整数运算通常都遵循商尽可能小原则,所以11mod10 (或11%10,后边表达式类似) 结果为1,此处没有异议;-11mod-10,商为1,余数为-1

异号整数运算中,python遵循商尽可能小原则,比如:-1 mod 10 ,商为-1,余数为9;1 mod -10 ,商-1,余数为-9

c/c++ 和java遵循商尽可能大原则 ,比如:-1 mod 10 ,商为0,余数为-1;1 mod -10 ,商0,余数为1

在以上理解的基础上在此说明“求余”与“取模”两者的区别:

3、“求余”与“取模”两者的区别

对整型变量n、d来说,求余运算和取模运算的公式都是:

1.求整数商:q=n/d;

2.计算余数或者模:r=n-q*b。

两种运算在第一步时就产生了不同的结果:求余运算在取q的值时,向正无穷方向舍入(商尽可能大);而取模运算在计算q的值时,向负无穷方向舍入(商尽可能小)。

例如:计算-9 mod 5

设a=-9,b=5

1.求整数商:求余运算得q=-1(向0方向舍入);取模运算得q=-2(向负无穷方向舍入)。

2.计算余数或者模:由于c值不同,求余得r=-4;取模得r=1。

归纳:

n和d符号相同时,求余和取模结果相同;

n和d符号不同时,求余结果的符号和n相同,取模结果的符号和d相同。

另外不同环境下“%”运算符的含义也不同:

1.c/c++、Java为求余

2.Python为取模

python实例:

print(1%10)
print(-1%10)
print(1%-10)
print(-11%-10)

执行结果:

 java实例:

public static void main(String[] args) {
	System.out.println(1%10);
	System.out.println(-1%10);
	System.out.println(Math.floorMod(-1,10));
	System.out.println(1%-10);
	System.out.println(Math.floorMod(1,-10));
	System.out.println(-11%10);
}

  

java执行结果:

参考:

https://blog.csdn.net/weixin_44252966/article/details/85248165

https://www.jianshu.com/p/cdc6f7a061b4

https://blog.csdn.net/h2453532874/article/details/88372376?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

>
作者:豌豆果果
出处:https://www.cnblogs.com/hylogs/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
觉得有所帮助,可以请果果喝咖啡哟^_^!

原文地址:https://www.cnblogs.com/hylogs/p/12822870.html