取余和取模的区别以及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>b
	z = x % y;//x,y都为正数,且x

	r = 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;
}

//运行结果为
取余和取模的区别以及c语言当中的取余%运算_第1张图片
注:%运算符的操作数必须为整型

你可能感兴趣的:(C)