宝藏级别的负数取模,让你关于负数取模不在陌生 >o< 进来看看吧
今天重点说下 符号篇的取模和求商包括取余的一些问题。
希望大家今天也要心情愉快的学习哦。
1 关于取整的问题
首先要明白取模和取余,要先明白取整的问题。
2 .取整方向 和对对应的函数
常见的取整方向是有四种
第一种向0取整(C语言默认),函数为trunc
第二种负无穷大取整,函数为floor
第三种正无穷大取整,函数是ceil
第四种四舍五入取整,这个就很熟悉了,函数是round。
总的来说:关于浮点数的取整有很多不一样的方法,不同方法可能会有同一个结果,也可能不同结果
3. 关于取模和取余现象区别
关于概念,都在学习过程中学过了,在复习一遍吧,对于a b两个自然数,d非0,可以证明两个唯一的整数 q 和 r ,满足 a = q*d + r 并且 0<= r < d,其中q被称为商,r 被称为余数。(这样看的话,余数一定是正数)
看个例子
int a = -10;int b = 3;printf("%d\n", a / b);printf("%d\n", a%b);
为什么取模之后变为 -1 呢?
是定义错了?还是C语言错了?
这又是概念上的冲突了。
看下例2 :(因为没有其他环境,就用函数模拟实现Python环境下的结果)
int a = -10;int b = 3;printf("%.1f\n",floor(a*1.0/b));//用不同的取整方式printf("%.1f\n", a*1.0 - floor(a*1.0 / b)*3);//公式计算余数
这样来看的话,是不是和公式上的又好像一样呢?
4.取模和取余本质区别
因为语言不同导致对负数的 “取模” 的值不同,我们可以分别叫正余数,负余数。
所以对于C语言中概念更新 :
对于a b两个自然数,d非0,可以证明两个唯一的整数 q 和 r ,满足 a = q*d + r 并且 0<= |r| < |d|其中q被称为商,r 被称为余数。
从本质来看:是商的取整方向不同,导致结果不同。
取模:是尽可能让商向负无穷大取整。
取余:是尽可能让商向0进行取整。
C语言的 % 的本质是取余。
而模拟实现的Python的本质是取模。
5.同符号数取模
对于一个正数,它的取整方向,0向取整和负无穷大取整方向一样,所以取模取余是等价。
对于一个负数,它的取整方向,0向取整和负无穷大取整方向不一样,所以取模不等价取余。
得出一个结论 :除数和被除数同符号的来说,取模等价于取余。
6.不同符号取模
同符号的说过了,那么不同符号呢?下面通过数学的转化进行验证,在举例子。
对定义进行变化:
a = qd +r,变为 r = a - qd,形式上为 x = y +z;
那么最终的x的符号是由 |y| 和 |z|的谁的大决定的,那么r的符号就是哪个值的符号。
x是被除数,q*d实际上就是( 商 * 除数),除数是常量,那么最终的值其实是由商的取整方式决定的。
c是0向取整,所以商的绝对值是变小的,所以就是 q *d 是整体变小的。
结论就是 :
在C语言中不同符号取余(或者其他采用0向取整的语言来说),余数符号与被除数相同。
例
int a = 10;int b = -3;printf("%d\n", a%b);int c = -10;int d = 3;printf("%d\n", c%d);
根据结论,余数的符号和被除数相同,那么a%b为1,c%d为-1
打印结果,也就是1和-1.
7.总结
- 浮点数取整有很多方式。
- 对于a b两个自然数,d非0,可以证明两个唯一的整数 q 和 r ,满足 a = q*d + r 并且 0<= |r| < |d|其中q被称为商,r 被称为余数。
- 不同语言中,余数的不同,可以分别叫为正余数和负余数。
- 具体余数的大小,是由于商的大小确定的,本质是商的取整方式不同导致的余数不同。
- 取余和取模的本质不同,取模:是尽可能让商向负无穷大取整。
取余:是尽可能让商向0进行取整。 - .除数和被除数同符号的来说,取模等价于取余。
- 在C语言中不同符号取余(或者其他采用0向取整的语言来说),余数符号与被除数相同。
下期预告
下期讲位运算符,下期更精彩哦~~~
各位看官,给个三连吧 !!!
宝藏级别的负数取模,让你关于负数取模不在陌生 >o< 进来看看吧相关推荐
- C语言中四种取整方式、取余/取模的运算以及负数取模的问题
零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...
- python取模运算_Python中的取模运算方法
所谓取模运算,就是计算两个数相除之后的余数,符号是%.如a % b就是计算a除以b的余数.用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得a = n * b + m ...
- 取模(mod)与取余(rem)的区别——Matlab学习笔记
取模(mod)与取余(rem)的区别--Matlab学习笔记http://www.bieryun.com/1099.html 昨天在学习Matlab的数学函数时,教程中提到取模(mod)与取余(rem ...
- 环,模,补码,负数的表示与减法实现
假设M是n-bit数的模,比如16是4bit二进制数的模,8是3bit二进制数的模,即从000->111,111+1=1000,超过3bit的那个1被舍弃回到000,0到7首位相连就形成一个环, ...
- 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序
[排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...
- python模运算求余_取模运算和取余运算
取模运算和取余运算 取模运算( " Modulo Operation " )和取余运算 ( " Complementation " )两个概念有重叠的部分但又不 ...
- VS2017制作POV-LED取模软件 可对图片取模
最近做旋转LED发现,网上的现有的取模软件大多数是矩形取模,字旋转起来会发生严重的变形.由于是旋转,就想到了极坐标,将直角坐标转为极坐标再按每一列导出数据. 对图片取模后的效果 可以查看不同坐标系下的 ...
- 三款国产宝藏级别软件,个个功能强大且好用,能让你的电脑黑科技感拉满
随着PC和手机行业的发展,各种类型的软件也如雨后春笋般不断涌现. 而在这个科技日新月异的时代,数不清的软件,足以让我们眼花缭乱.如何在这琳琅满目的软件中,一眼相中宝藏级别的"神器" ...
- 华为云IoT智慧物流案例04 | 4G网卡拨号(广和通L610-CAT.1模组)与北斗定位模组(中科微电子)数据解析
华为云IoT智慧物流案例04 | 4G网卡拨号(广和通L610-CAT.1模组)与北斗定位模组(中科微电子)数据解析 回顾 第一章 广和通L610-CAT.1模组调测和拨号脚本编写并验证网络 第二章 ...
- 什么叫取反_彻底搞明白“取反加1”到底是个什么鬼?
写作时间:2020-08-15 目录: 1.问题: 2.将二进制表达的负数换成十进制怎么弄? 3.总结一下 正文: 1.问题: 比如说.要表达0~255的十进制数,在FPGA使用一个8bit[7:0] ...
最新文章
- python爬虫获取的网页数据为什么要加[0-[Python爬虫] 等待网页加载后再获取内容...
- Linux学习之用户管理和组管理
- 【洛谷 P4168】[Violet]蒲公英(分块)
- 2015年职称计算机考试大纲,2015年职称计算机考试photoshop练习题6
- eclipse新建项目有红叉_selenum+java+eclipse环境搭建和浏览器驱动配置
- Hive 大小表关联查询异常
- IEDA 配置Git_04
- JSON(5)---JSON.stringify()
- C++_引用做函数的返回值_引用的本质---C++语言工作笔记032
- BUPT复试专题—统计字母(2008)
- 智能传感器产业三年行动指南
- 【动态规划】LeetCode 62. Unique Paths
- 数据推动变革 PMC创新存储方案应对挑战
- matlab如何创建callback函数_MATLAB作图实例:46:显示复杂的三维对象
- 1156 Sexy Primes – PAT甲级真题
- CAN总线学习总结2——CAN错误及CAN busoff处理机制
- 基于JAVA校园快递代领系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- 某音热门---图片转字符SpringBoot版
- 2020年,微信的基地属性正在悄然转向
- idea配置查看代码汇编指令插件
热门文章
- 开发与测试如同左手和右手
- Linux入坑手册(鸟哥的私房菜)
- html 下划线 鼠标手,(腾讯设计规范.ppt
- 聊一聊如何把SSL证书安装到小鸟云服务器上
- FPGA--OV7725摄像头采集与VGA显示实验--1--OV7725使用与驱动协议
- 关于课题的一点思考(基于多生理信号的情绪识别)
- [系统安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏
- SQL :Date 函数
- 尚硅谷周阳学习微服务《二》
- “不靠谱“的布隆过滤器是怎么成为大数据世界中的韦小宝的?