C++中取余运算的实现

一、C++中的整数除法

C++中整数除法和取余用的是truncate除法(舍0取整),而给无符号类型赋值超出表示范围时候用无符号类型等于赋值对无符号类型可以表示的数值总数取余,智力的取余是基于floor除法的(向下取整)。
在整数除法中,Java/C 等语言用的是 truncate 除法,Python 用的是 floor 除法。

1、truncate 除法

向零取整。向 0 方向取最接近精确值的整数,换言之就是舍去小数部分,因此又称截断取整(Truncate)。可以这样理解,先用浮点数除法进行计算,计算结果直接舍去小数部分。
如:

5/-2=-2.5,所以整数除法中5/(-2)=-2
-5/2=-2.5,所以整数除法中-5/2=-2
-5/-2=2.5,所以整数除法中-5/-2=2
5/2=2.5,所以整数除法中5/2=0

2、C++中取余

有上述除法,我们已知a/b=c,而取余操作时a%b=d
那么d的求解方法如下:

d=a-(bc)
5%2=5-(22)=1
(-5)%(-2)=(-5)-((-2)2)=-1
5%(-2)=5-((-2)(-2))=1
(-5)%2=(-5)-(2*(-2))=-1

最后两个式子尤其值得注意

3、floor 除法

理解起来就是向下取整

5/-2=-2.5,所以floor除法中5/(-2)=-3
-5/2=-2.5,所以floor除法中-5/2=-3
-5/-2=2.5,所以floor除法中-5/-2=2
5/2=2.5,所以floor除法中5/2=2

4、C++中无符号变量被赋值超出他表示范围的情况

如我们给定unsigned char a;取值范围为0-255共256个数值,则

a = 5 输出为5 理解为 5-0256
a=257 输出为1 理解为 257-1256
a=-5 输出为251 理解为-5 - (-1256)
a=-257 输出为255 理解为 -257 - (-2256)

到此这篇关于C++中取余运算的实现的文章就介绍到这了,更多相关C++ 取余运算内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • ASP(VBScript)中整除和取余

    整除 ASP(VBScript) 中整除用"\",比如 m = 5 \ 2,结果为 2. 取余 ASP(VBScript) 中取余用 mod,比如 m = 5 mod 2,结果为 1. 大数注意 m = 4444444444 / 2 n = 4444444444 \ 2 第一句是正确的,第二句运行时会报溢出错误,因为:在整除.取余操作前,数值表达式四舍五入为 Byte.Integer 或 Long 子类型表达式.Long 子类型的范围是 [-2147483648, 2147483647

  • Java实现Fibonacci(斐波那契)取余的示例代码

    Description Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. Input 多组测试数据 输入包含一个整数n.1 <= n <= 1,000,000. Output 每组输出一行,包含一个整数,表示Fn除以10007的余数. Sample Input 10 22 Sample Output 55 7704 利用余数三大定理: 1.余数的加法定理 a与b的和除以c的余数,等于

  • C++中取余运算的实现

    一.C++中的整数除法 C++中整数除法和取余用的是truncate除法(舍0取整),而给无符号类型赋值超出表示范围时候用无符号类型等于赋值对无符号类型可以表示的数值总数取余,智力的取余是基于floor除法的(向下取整). 在整数除法中,Java/C 等语言用的是 truncate 除法,Python 用的是 floor 除法. 1.truncate 除法 向零取整.向 0 方向取最接近精确值的整数,换言之就是舍去小数部分,因此又称截断取整(Truncate).可以这样理解,先用浮点数除法进行计

  • Python中的取整、取余运算方法

    目录 1.取整运算 2.取余运算 Python 几种取整的方法 1.向下取整 2.四舍五入 3.向上取整 4.分别取整数部分和小数部分 1.取整运算 在Python中取整运算的运算符为//,且取整运算的取整为向下取整,不进行四舍五入例:9//4=2,即9对4取整等于2-9//-4=2,因为-9÷-4=2.25,取整为2那么问题来了,9//-4等于多少呢?9//-4=-3,因为9÷-4应该等于-2.25,那么对-2.25向下取整,应该为-3,而不是-2,所以9//-4=-3那么-9//4呢?-9÷

  • Java中的相除(/)和取余(%)的实现方法

    取模运算与取余运算两个概念有重叠的部分但又不完全一致.主要的区别在于对负整数进行除法运算时操作不同. 对于整形数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商 c = a / b: 2.计算模或者余数 r = a - c* b . 取模运算和取余运算在第一步不同: 取余运算在取c值时,向0方向舍入:而取模运算在取c值时,是向负无穷方向舍入 各个环境下运算符%的含义不同,C/C++,Java为取余,python为取模 Java取余运算规则如下: a%b = a - (a/b)*b 让

  • java 取模与取余的区别说明

    取模与取余的区别 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c * b 求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数):而取模运算在计算c的值时,向负无穷方向舍入(floor()函数). 例如计算:-7 Mod 4 那么:a = -7:b = 4: 第一步:求整数商c,如进行求模运算c = -2(向负无穷方向舍入),求余c = -1(向0方向舍入): 第二步:计算模和

  • PHP实现大数(浮点数)取余的方法

    本文实例讲述了PHP实现大数(浮点数)取余的方法.分享给大家供大家参考,具体如下: 一般我们进行取余运算第一个想到的就是用百分号%,但当除数是个很大的数值,超出了int范围时,这样取余就不准确了. php大数(浮点数)取余函数: /** * php大数取余 * * @param int or float $bn 除数 * @param int $sn 被除数 * @return int 余数 */ //大数(浮点数)取余方法 function Kmod($bn, $sn) { return in

  • 基于python 取余问题(%)详解

    取余的公式: 余数=除数-被除数*商 python的的余数是按照整除(向下取整)得到的商来计算的. 取余问题主要分为 : 正数与正数,负数与负数,正数与负数 ,0 正数与正数 #大数/小数:因为得出的商和整除得出的一致,所以直接按照这个公式(余数=除数-被除数*商)即可. print(9//7) #1 print(9%7) #2 #小数/大数:因为得出的商和整除得出的一致,所以直接按照这个公式(余数=除数-被除数*商)即可. #这里也可以说:只要正数与正数是小数/大数 的,商都是0 ,所以余数是

  • C语言中四种取整方式,取余/取模运算以及负数取模问题详解

    目录 零向取整.负无穷向取整.正无穷向取整.四舍五入取整 总结 零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数是负无穷大取整: 它的取整方案是向负无穷大取整: 有地板取整,当然也有正无穷大取整的函数: 它的取整方式是向正无穷大取整: 最后,还有四舍五入取整的函数: 取模/取余 取模概念: 如果a和d是两个自然数,d非零,可以证明存在两个唯一的整

  • Python中的取模运算方法

    所谓取模运算,就是计算两个数相除之后的余数,符号是%.如a % b就是计算a除以b的余数.用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得a = n * b + m,那么a % b = a - n * b = m. 取模运算的两个操作数都必须是整数,可以是负整数,但是b不可以是0,因为被除数不能为0嘛. 当a和b中存在负整数时,首先计算|a|%|b|=c,然后a%b的符号与b一致.也就是说,如果b>0,则a%b=c:如果b<0,则a%b=-c 比如: 好了,

  • C#编程实现取整和取余的方法

    本文实例讲述了C#编程实现取整和取余的方法.分享给大家供大家参考,具体如下: "%"为取余号,不用多说. "/"号现在整形运算是取整,浮点运算时为除法运算,如54/10结果为5,54.0/10.0结果为5.4而且取整时不进行四舍五入只取整数部分,如54/10和56/10是5. Math.Celling()取整数的较大数,即向上取整.相当于不管余数是什么都会进一位.如Math.Celling(54.0/10.0)结果为6. Math.Ceiling(Convert.T

随机推荐