取余和取模的区别以及c语言当中的取余%运算

一:区别在C/C++中%为取余符,而在python中%为取模符
对整数a,b取余和取模统一都分为2步:
第一步:求整数商, c = a / b
第二步:计算模或余数,r = a - c * b
这里,第二步对于取余还是取模都是相同的,因为减法和乘法一般不会带来误差;但是对于第一步,除法会带来误差,取余在计算c时是向0的方向舍入的,比如-1/5=-0.2,于是向0取整得0,因此余数 r1 = -1 - 0 * 5 = -1;但是取模在计算c时是向负无穷大方向舍入的,即上面的-0.2会取整为-1,因此模 r2 = -1 - (-1) * 5 = 4;
因此,对于两个数都是正数来说,没有差别,因为0和负无穷大在小数c的同一个方向上;但是对于存在一个负数的情况下,0的方向和负无穷大在c的两个相反的方向,因此就有差别。

“当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如, 8比特大小的unsigned char 可以表示0 至 255 区间内的值,如果我么赋值给此类型变量一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此,把 -1 赋值为8比特大小的unsigned char 所得的结果是255”

参考链接:https://www.jianshu.com/p/64b3979268a6

二:运算
(1)当两个数都是正数时包含两种情况,
除数大于被除数,例如2%5,那结果就是被除数2
除数小于被除数,例如5%2,那结果1
(2)当有一个数为负数时
if |x|>|y|
ans:x+y
else
ans: x
(3)当两个数都是负数时,将两个数视为正整数,但结果加一个负号.

//以下为代码测试

#include
#include
int main()
{int a = 12, b = 5;int c = 0;int x = 3, y = 5;int z = 0;int p = -6, q = 5;int r = 0;int m = -1, n = 5;int k = 0;int i = -5, j = -6;int t = 0;c = a % b;//a,b都为正数,且a>bz = x % y;//x,y都为正数,且xr = p % q; //p,q有一个是负数时,且|p|>|q|k = m % n;//p,q有一个是负数时,且|p|<|q|t = i % j;//i,j都为负数printf("%d\n", c);printf("%d\n", z);printf("%d\n", r);printf("%d\n", k);printf("%d\n", t);system("pause");return 0;
}

//运行结果为
在这里插入图片描述
注:%运算符的操作数必须为整型


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部