C语言深度理解 负数取余 取模

  • 关于取余和取模的问题
  • 定义
  • 取余时有负数怎么计算?
  • 取余和取模的区别
  • 取余和取模时候等价什么时候不等价
  • 总结

关于取余和取模的问题

 许多小伙伴在刚开始学C语言的时候,知道了什么是取余或者取模。比如10 % 3,可以轻而易举的得出答案是1。许多教材上或者老师教的时候往往都是用正数计算的,那么小伙伴们有没有想过如果是**负数和正数之间%**会出现什么情况?还有有没有想过**取余和取模一样吗**?这篇文章让我们再来重新理解一下取余和取模的概念。

定义


这个公式很好理解。我们以10 % 3 为例。
先算出q = 10 / 3 = 3
那么a = 10 q = 3 d = 3
得出 10 = 3*3 + r 所以r = 1
我们的余数就是1
了解这个取余定义后,接下来我们直接进入主题

取余时有负数怎么计算?

我们现在要算 -10 % 3
我们先算出q,q = -10 / 3 = -3
然后代入上面的公式
-10 = (-3*3 )+ r
我们得到余数r为-1

这时肯定会有小伙伴会觉得,既然我加了一个负号那最后的结果也只是加了和负号而已啊。

那我们再试试 10 % -3
我们先算出q,q = 10 / -3 = -3
然后代入上面公式
10 = (-3 * -3) + r
我们余数r 为 1

两个结果显然是不同的,所以利用这个公式可以帮助我们轻而易举地计算出负数和正数以及负数和正数之间的取余。

取余和取模的区别

这里需要涉及到 向负无穷大取整向零取整的概念。不了解的小伙伴可以点击这个链接去看一下
C语言深度理解 取整
我们知道,C语言中我们默认是向0取整的
因此在计算-10 / 3 时,结果是-3
而如果有编程语言,比如Python,默认是向负无穷大取整的话
-10 / 3 ,结果是-4
那么在这种向负无穷大取整的方式下,
我们利用刚才的公式计算一下
先求出 q = -10 / 3 = -4
然后代入公式 -10 = (-4 * 3) + r
我们得到r=2
而在刚才的向0取整的方式下,
我们计算 -10 % 3 = -1
所以,两种不同的结果,本质上因为所得“商”不同,而取整方式导致了商的不同。
这里得到的两个不同的结果,我们称为“正余数”和“负余数

说了这么多,我们给出取余取模的区别了。
取余:让商进行向0取整
取模:让商进行向负无穷大取整

取余和取模时候等价什么时候不等价

我们直接给出结论:
参与取余的两个数据,
1.如果同符号,那么取余就是取模
2.如果两个数据符号不同,那么取余不等价与取模

第一个结论我们举个例子
先拿 10 % 3 来说。
在默认向0取整的C语言中,我们计算q = 10 / 3 = 3
在默认向负无穷大取整的Python中,我们计算 q = 10 / 3 = 3
我们可以发现商的结果是一样的。
所以这时取余和取模等价

因为一个大于0的数按照这两种方式取整时,都会在数轴上往左边走
既然这样,那我们取整的结果是一样的。
这时候两种不同的取整方式经过公式计算得到 余数都为r=1
这也就是为什么在书上或者教学中,我们学习%都采用两个正数计算的原因,因为学的浅,也很好理解,只需要知道是因为余数为1所以结果就是1就行了。不需要去更深入的去讨论取整方式的概念。

第二个结论我们再举个例子
拿-10 % 3来说
在默认向0取整的C语言中,我们计算 q = -10 / 3 = -3
在默认向负无穷大取整的Python中,我们计算 q = -10 / 3 = -4
这个时候计算出来的商就不一样了,这时候取余和取模就不等价了。
一个往数轴右边取整,一个往数轴左边取整。
计算出来的-10 % 3也就不一样了。

总结

不管是正数%负数,还是负数%正数。
只要我们知道取整方式,先计算出两者的商,再代入公式

就可以得出相应的余数了。

【C语言】深度理解 负数取余 取模相关推荐

  1. C语言中四种取整方式、取余/取模的运算以及负数取模的问题

    零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...

  2. 深度理解取余/取模运算

    日常编程经常会接触到取余/取模运算,那么计算机中取余/取模运算究竟是怎么定义的? P1:四种"取整"方式 数学取整 1.1 向0取整 parseInt() 注意接受参数是strin ...

  3. C语言符号-取余\取模运算

    目录 前言 取整 向0取整 向-∞取整 向+∞取整 四舍五入取整 汇总 取模\余 对于正数取模 对于负数取模 取余和取模的理解 前言 本文主要讲解并真正理解取余\取模运算是怎样的! 取整 首先取整有四 ...

  4. python的取整和取余_python取余取整

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 取余的公式:余数=除数-被除数*商python的的余数是按照整除(向下取整)得到 ...

  5. Java 水仙花数(取余%取整/)

    水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身.例如:1^3 + 5^3+ 3^3 = 153. public class Flower {public static void ...

  6. 蓝桥杯算法训练之数对(取余取整)

    问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出格式:输出有若干行,每一行是一个乘法式子.(注意:运算符号与数 ...

  7. c语言常量中有负数吗,c语言能对负数求余吗 在c语言中是什么意思

    请问C语言是怎么计算负数取余的? C语言计算负数的余数:符号中的除数判定为-7,7,-7,公式中的判定为:例如-7%5=-2:7%-5=2:-7%-5=-2:负数余数原理:任意整数n都可以表示为n=k ...

  8. 取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除

    首先,我们来看数学中对余数的定义 0到除数之间的整数,所以当除数是负数的时候,余数也是负数. 举个例子: 接下来,我们看计算机中余数是怎么求的??? 所有的语言和计算器都遵循了让商靠近零的原则 在C+ ...

  9. oracle求整数取余,oracle 取余 取整 字符串连接

    sql中的取模,取整,字符串连接等操作: c = a mod b ;//取模 c = trunc(a/b);//取整 //连接两个字符串,sql中不能用+号连接两个字符串 c = a || b; 或 ...

最新文章

  1. 如何处理海量数据(上):从并发编程到分布式系统
  2. BH38旋转编码器初步测试
  3. 我的世java途径错误_我的世界JAVA路径错误的解决方法分享
  4. C语言求网格的最大不重复路径数的算法(附完整源码)
  5. C#实现乞丐版IOC容器
  6. SpringCloud Ribbon实战(三)
  7. android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...
  8. diy 单片机 自动浇花_造个自动浇花装置(完)
  9. pycharm关闭/开启代码补全/代码提示
  10. 微信公众号群发模板消息占用每月4次群发次数吗
  11. 网络技术——路由器及其配置
  12. 8位数字的正则表达式
  13. cocos2d-js的(layer)生命周期,ctor,onEnter,onExit的使用
  14. Android 360度全景照片展示
  15. 几款U盘数据恢复的软件使用测评
  16. 计算机科学新技术新应用发展,新技术的发展和应用
  17. Win10系统修改时间设置
  18. 谈谈区块链入门技能(二):以太坊区块链浏览器如何使用?
  19. 计算机中丢失ubiorbitapi,我的刺客信条出现无法启动此程序,因为计算机中丢失ubiorbitapi_r2_loader.dll,,怎么处理。。...
  20. 如何发现程序中的错误

热门文章

  1. Tinyos学习笔记汇总
  2. 怎么用计算机弹出光年之外,明日之后光年之外简谱代码-明日之后光年之外怎么弹-明日之后光年之外钢琴曲谱分享_牛游戏网...
  3. 英文版ubuntu系统如何添加中文拼音输入法
  4. Matlab符号微积分练习
  5. 关于mysql项目经验怎么写_数据库管理员岗位项目经历怎么写
  6. Android 触摸屏Event上报操作
  7. 数据库应用 数据库连接技术 数据库应用开发
  8. windows文件系统格式及U盘格式化建议
  9. 移动端H5的js操作
  10. 使用MySQL的binlog日志恢复误删数据