C语言取模运算(取余运算)
C语言取模运算(取余运算)
- 取模算法:
- 取余(取模)的奥义
- C语言运用
取模算法:
取模运算也叫取余运算,在C中用%来表示, 数学中叫mod。
x mod y = x%y
x%y = x - y[x/y], for y!=0.
数学中的余数概念和我们的计算机中的余数概念一致,但实现却不一致。
其中 [x/y] 代表的是 x/y 的最小下界。
例:
-3 mod 2 = -3 - 2*[-3/2]
= -3 - 2*[-1.5]
= -3 - 2*(-2)
= -3 + 4
= 1
而我们的计算机是怎么做的呢:
-3%2 = -3 - 2*(-3/2)
= -3 - 2*(-1)
= -3 - (-2)
= -1
所以计算机中的取余实际上是:
x%y = x - y(x/y), for y!=0.
这就是二者的区别。这个区别,对于正数,二者计算出的结果是相等的,但是负数就不相等了。这就意味着,如果以后在使用数学中余数相关定理的时候, 要注意计算机中余数的计算和数学定义不是完全一致的,所以在计算机上,对于负数,数学定理并不完全适用。当然,对于正数,二者是没有区别的。至于为什么计算机上要这么实现,我想恐怕还是历史原因,最早的计算机如果这样计算除法(取余是靠除法来完成的),那么就涉及到浮点数的计算以及取下界,这样,将比较大的降低效率,所以实现成了这样的方式,一直沿用至今。
取余(取模)的奥义
“/”在我们这些程序中代表整除,它符合除法法则,异号抵消。
再看看我们余数的定义:
整除“余”下的“数”。
则有:余数=被除数-商除数
商就是我们整除的结果。
看例子:
eg1:
(-6%5) = -6 - (-6/5)5
(-6%5) = -6 - (-1)5
(-6%5) = -6 - (-5)
(-6%5) = -6+5
(-6%5) = -1
eg2:
(5%-6) = 5 - (5/-6)(-6)
(5%-6) = 5 - (0)(-6)
(5%-6) = 5 - 0
(5%-6) = 5
eg3:
(-5%-6)= -5 - (-5/-6)(-6)
(-5%-6)= -5 - (0)(-6)
(-5%-6)= -5 - 0
(-5%-6)= -5
eg4:
(6%-5) = 6 - (6/-5)(-5)
(6%-5) = 6 - (-1)*(-5)
(6%-5) = 6 - 5
(6%-5) = 1
综上所述可以得出结论:被除数如果是负数,那么无论除数正负,结果都是负数。
C语言运用
除了上边的运算模式外取余还有其他的运用,由于能力有限在这只总结了其中一部分
1、任何数%2都可以检测是否为偶数,如果结果等于1则表示为奇数
示例:
100 % 2 = 0;101 % 2 = 1;
2、如果想要限制一个数的大小,除了用位与运算除外还可以用取余运算
示例:
100 % 5 = 0; 101 % 5 = 1;102 % 5 = 2; 103 % 5 = 3; 104 % 5 = 4; 105 % 5 = 0; …
示例代码:
int main()
{
int i = 100, j = 5, k = 0;
for (i; i<110; i++)
{
k = i % j;
printf("%d\t", k);
}
return 0;
}
运行结果:
0 1 2 3 4 0 1 2 3 4
3、如果 smallnum % bignum;结果将会是smallnum 本身的值
示例:
10 % 88= 10; 11 % 88 = 11; 11 % 89 = 11;
本文参考:https://blog.csdn.net/yingbinchina/article/details/2715549
C语言取模运算(取余运算)相关推荐
- C语言fmod()函数:对浮点数取模(求余)和%取余运算符的比较
头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为: double fmod (double x); 设返回值为 ret,那么 x = ...
- 基于加取模和循环左移运算的扩散算法matlab
基于加取模和循环左移运算的扩散算法 实际上是对前面两种扩散算法的显著改良. LSB3表示取数据的最低三位,对于8b的灰度图像,每个像素都是8b的,所以LSB3得到的数据范围始终在0~7,是一个像素点数 ...
- 实数范围内(包含负数)的求模与求余运算异同
以下内容主要总结整理自以下文献: 一.实数的取余运算 二.取模和取余的区别 三.负数.取模与取余 背景 最近在一道 Java 习题中,看到这样的一道题: What is the output when ...
- Java 取模和取余
Java 取余和取模都是计算一个整数除以另一个整数后所得到余数.计算原理如下: 取余运算符 % 表示求余数运算,计算公式为 a % b = r,其中 a 和 b 分别表示被除数和除数,r 表示所得到的 ...
- java中的取模_Java 中的取模和取余
期末复习密码学时需要用到取模运算,发现 Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation). 计算方法 对于整数 a,b 来说 ...
- java取模_Java 中的取模和取余
期末复习密码学时需要用到取模运算,发现 Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation). 计算方法 对于整数 \(a\), ...
- JS笔记之--Javascript的取整、取商、取模、取余
js的取整(取商) parseInt(6/4) --> 1 (取商) //向上取整 Math.ceil(1.1) --> 2 //向下取整 Math.floor(1.9) --> 1 ...
- 大数运算(5)——大数除法(取模、取余)
有关于大数除法的运算可以大致分为两种:一种是求商(取模),另一种是求余数(取余). 有两个大整数a和b,当a==b时,a/b==1,余数是0.(a!=0,b!=0) 当a>b时,a/b>= ...
- java中的取模和取余_取模运算
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 取模运算是求两个数相除的余数.[1] 取模运算("Modulus Operation")和取余运算(&qu ...
- mysql取余 和 取模_java 取模运算% 实则取余 简述 例子 应用在数据库分库分表
java 取模运算% 实则取余 简述 例子 应用在数据库分库分表 求模运算与求余运算不同."模"是"Mod"的音译,模运算多应用于程序编写中. Mod的含义为 ...
最新文章
- linux查看nginx并发连接情况
- unity项目源码_在Unity中使用protobuf
- Packet tracer软件安装,模拟网络搭建【Packet tracer安装和使用】
- fiddler和xampp安装成功后,网站打不开的原因
- Java的对象初始化过程
- python 主要内容,介绍一些有关python的重要内容
- [翻译]SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb
- er图转换成关系模型的例题,将ER图转换为关系模型
- Matplotlib 中文用户指南 2 安装
- Ubuntu安装nextcloud-17.0.1
- 个人Web自动化测试学习点总结
- eclipse中文包和控制台中文显示乱码
- Android 汉字转拼音工具类
- 2018年中国网络游戏行业市场前景研究报告
- 消息队列的全双工通信
- One Note 插件NoteHighlight2016安装
- 云计算是把计算机资源放在什么上,云计算就是把计算机资源都放到什么上
- goldwave混音功能—把两个音效文件合并在一起
- python中安装wordcloud 出现cl.exe failed with exit status 2问题解决
- 百度云非 VIP如何作弊加速?