取余运算符

转自  http://wenku.baidu.com/view/eca578ec856a561252d36f8d.html

C%运算知多少呢?
当是正整数时,可能大家都知道。例如:5%3等于2, 3%5等于3
当存在负数时呢?先看看例子:
例一:
int main()
{int x;
x = -6%5; printf("%2d/n",x);
x = 6%-5; printf("%2d/n",x);
x = 1%-5; printf("%2d/n",x);
x = -1%-5; printf("%2d/n",x);
x = -6%-5; printf("%2d/n",x);
}
运行结果为:
-1
1
1
-1
-1
例二:
#include <stdio.h>
int main()

{int x;
x = 5%-6; printf("%2d/n",x);
x = -5%6; printf("%2d/n",x);
x = 4%5; printf("%2d/n",x);
x = -4%-5; printf("%2d/n",x);
x = -5%-6; printf("%2d/n",x);
}
运行结果为:

5
-5
4
-4
-5

余数的定义:当被除数不够整除时余下的数。

当都是正整数时:
除法实际可转化为减数,不够减时剩下的就是余数。
例如:12%5
12-5-5
2
当存在负数时:
x%y
i.
当异号时:

if |x|>|y|
result: x+y
else
result: x
例:

-6% 5
等于-1
6%-5
等于
1
5%-6
等于
5
-5% 6
等于
-5
ii.
当同号时:

if |x|>|y|
result: x-y
else
result: x
例:

-1%-5
等于-1
-6%-5
等于
-1
-4%-5
等于
-4
-5%-6
等于
-5

再看看我们余数的定义

整除下的
则有:余数=被除数-商*除数
商就是我们整除的结果。
看例子:
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

数学中的余数(remainder) 其实就是取模(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.

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值