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语言取模运算(取余运算)相关推荐

  1. C语言fmod()函数:对浮点数取模(求余)和%取余运算符的比较

    头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为:     double fmod (double x); 设返回值为 ret,那么 x = ...

  2. 基于加取模和循环左移运算的扩散算法matlab

    基于加取模和循环左移运算的扩散算法 实际上是对前面两种扩散算法的显著改良. LSB3表示取数据的最低三位,对于8b的灰度图像,每个像素都是8b的,所以LSB3得到的数据范围始终在0~7,是一个像素点数 ...

  3. 实数范围内(包含负数)的求模与求余运算异同

    以下内容主要总结整理自以下文献: 一.实数的取余运算 二.取模和取余的区别 三.负数.取模与取余 背景 最近在一道 Java 习题中,看到这样的一道题: What is the output when ...

  4. Java 取模和取余

    Java 取余和取模都是计算一个整数除以另一个整数后所得到余数.计算原理如下: 取余运算符 % 表示求余数运算,计算公式为 a % b = r,其中 a 和 b 分别表示被除数和除数,r 表示所得到的 ...

  5. java中的取模_Java 中的取模和取余

    期末复习密码学时需要用到取模运算,发现 Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation). 计算方法 对于整数 a,b 来说 ...

  6. java取模_Java 中的取模和取余

    期末复习密码学时需要用到取模运算,发现 Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation). 计算方法 对于整数 \(a\), ...

  7. JS笔记之--Javascript的取整、取商、取模、取余

    js的取整(取商) parseInt(6/4) --> 1 (取商) //向上取整 Math.ceil(1.1) --> 2 //向下取整 Math.floor(1.9) --> 1 ...

  8. 大数运算(5)——大数除法(取模、取余)

    有关于大数除法的运算可以大致分为两种:一种是求商(取模),另一种是求余数(取余). 有两个大整数a和b,当a==b时,a/b==1,余数是0.(a!=0,b!=0) 当a>b时,a/b>= ...

  9. java中的取模和取余_取模运算

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 取模运算是求两个数相除的余数.[1] 取模运算("Modulus Operation")和取余运算(&qu ...

  10. mysql取余 和 取模_java 取模运算% 实则取余 简述 例子 应用在数据库分库分表

    java 取模运算%  实则取余 简述 例子 应用在数据库分库分表 求模运算与求余运算不同."模"是"Mod"的音译,模运算多应用于程序编写中. Mod的含义为 ...

最新文章

  1. linux查看nginx并发连接情况
  2. unity项目源码_在Unity中使用protobuf
  3. Packet tracer软件安装,模拟网络搭建【Packet tracer安装和使用】
  4. fiddler和xampp安装成功后,网站打不开的原因
  5. Java的对象初始化过程
  6. python 主要内容,介绍一些有关python的重要内容
  7. [翻译]SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb
  8. er图转换成关系模型的例题,将ER图转换为关系模型
  9. Matplotlib 中文用户指南 2 安装
  10. Ubuntu安装nextcloud-17.0.1
  11. 个人Web自动化测试学习点总结
  12. eclipse中文包和控制台中文显示乱码
  13. Android 汉字转拼音工具类
  14. 2018年中国网络游戏行业市场前景研究报告
  15. 消息队列的全双工通信
  16. One Note 插件NoteHighlight2016安装
  17. 云计算是把计算机资源放在什么上,云计算就是把计算机资源都放到什么上
  18. goldwave混音功能—把两个音效文件合并在一起
  19. python中安装wordcloud 出现cl.exe failed with exit status 2问题解决
  20. 百度云非 VIP如何作弊加速?

热门文章

  1. Android 旗舰机标配的高帧屏(120Hz),对各位 App 开发者有什么影响?
  2. 阿里云ECS建网站(建站)超详细全套完整图文教程! [
  3. svn服务器会用到哪些端口_如何查看svn端口号?
  4. 关于strerror
  5. 交换机端口配置全双工模式
  6. 初级会计--税法公式大全(一)
  7. 云+5G+AI,华为是如何布局在线教育的?
  8. axios - http请求库
  9. 软件必备模块-全栈工程师
  10. 【记录】Android关于WebView内容转PDF文件打印及其遇到的问题解决方案