取餘運算符

轉自  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.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章