取模与取余的不同
通常情况下,我们对取余和取模混为一谈,但是这两个是不一样的。我们在c c++ java python里面都是用%表示取模或者取余的,但是我们分别用这四门语言去计算-1%3这个式子发现结果并不一样,原因是在c c++ java里面%表示取余,而在python里面%表示取模。
在我们进行计算的两个数符号一样时,取余和取模的结果是一样的,因为符号一样时利用下面公式计算出来的a/b总是非负数,也就是说这个时候无论事取余还是取模计算出来的c是一样的,所以这里我们不在讨论。
在进行计算的两个数符号不一样时,取余和取模的结果是不一样的,究其原因是下面公式中在计算c的时候趋向不同。
对于整数a,b来说,取余和取模都有着下面这个关系:
1:求整数的商 c = a / b
2:计算模或者余数 r = a - c * b
取余和取模的不同之处就是在c这里的不同,取余运算我们是尽可能的向0方向舍去小数位,比如-1/3是-0.33333,我们就取c为0,然后计算r = -1 - 0 * 3,即r为-1;
取模运算是尽可能向负无穷的方向舍去小数位,比如-1/3是-0.33333,我们就取c是-1,然后计算r = -1 - ( -1) * 3,及c是2。
下面我们再举一个例子 -7 % 4
1.这里a是-7, b是4,我们计算-7 / 4 = -1.75
2.取余:尽可能向0舍去小数位,即c取-1
取模:尽可能向负无穷舍去小数位,即c取-2
3.取余:r = -7 - (-1) * 4,即 r 为 -3
取模:r = -7 - (-2) * 4,即 r 为1
下面我们再举一个例子 7 % -4
1.这里a是7, b是-4,我们计算7 / -4 = -1.75
2.取余:尽可能向0舍去小数位,即c取-1
取模:尽可能向负无穷舍去小数位,即c取-2
3.取余:r = 7 - (-1) * (-4),即 r 为 3
取模:r = 7 - (-2) * (-4),即 r 为-1
下面我们分别是java c c++ python的测试结果: