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

  • 54
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值