網站首頁 美容小常識 享受生活 東方時尚 識真假 高奢 資訊 遊戲攻略 搞笑段子
當前位置:品位站 > 享受生活 > 心理

c語言取模取餘運算規則

欄目: 心理 / 發佈於: / 人氣:1.06W
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

綜上所述可以得出結論:被除數如果是負數