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

mac2026-03-18  6

一:区别在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<stdio.h> #include<iostream> 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<y 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; }

//运行结果为 注:%运算符的操作数必须为整型

最新回复(0)