辨析取模運算與取餘運算

2021-07-09 18:15:34 字數 1774 閱讀 8633

通常情況下,取模運算(mod)和取餘運算(rem)被混為一談,因為在大多數的程式語言裡,都用 」 % 」 符號來表示取模運算或者取餘運算。所以有必要編寫本文件,來為在此環節遇到問題的程式設計師理清思路,同時也提醒各位需要注意在不同程式語言環境下 」 % 」 運算子的具體意義,因為在有負數存在的情況下,兩者的結果是不一樣的。

首先,我們需要區分兩者的概念。

給定乙個正整數p,任意乙個整數n,一定存在等式 :

n = k * p + r ;

其中 k、r 是整數,且 0 ≤ r < p,則稱 k 為 n 除以 p 的商,r 為 n 除以 p 的餘數。

對於正整數 p 和整數 a, b,定義如下運算:

取模運算:a % p(或a mod p),其結果表示a除以p的餘數。

模p加法: 其結果是a + b算術和除以p的餘數。

模p減法: 其結果是a - b算術差除以p的餘數。

模p乘法: 其結果是 a * b算術乘法除以p的餘數。

給定乙個正整數p,任意乙個整數n,一定存在等式 :

n = k * p + r ;

其中 k、r 是整數,且 0 ≤ r < p,則稱 k 為 n 除以 p 的商,r 為 n 除以 p 的餘數。

取餘運算:是指希望乙個較小的數除以另乙個較大的數,從而獲得的不夠除的部分就是餘數,就是取餘運算的結果。

接下來,需要說明的是,取模運算(「modulo operation」)和取餘運算(「remainder operation」)兩者概念雖有重疊的部分但又不完全一致。主要的區別在於對負整數進行除法運算時操作不同。取模運算主要是用於計算機術語中。取餘運算則更多是數學概念。模運算在數論和程式設計中都有著廣泛的應用。

對於整型數a,b來說,取模運算或者取餘運算的方法都是:

1.求整數商: c = a / b;

2.計算模或者餘數: r = a - c * b.

取模運算和取餘運算在第一步不同: 取餘運算在取c的值時,向0 方向捨入(fix()函式); 取模運算在計算c的值時,向無窮小方向捨入(floor()函式)。

因此,當a和b符號一致時,取模運算和取餘運算所得的c的值一致,因此結果一致。但是當符號不一致的時候,結果不一樣。

具體來說,取模運算結果的符號和b一致,取餘運算結果的符號和a一致。

在c語言中,%符號表示的是取餘運算,在python指令碼中,%表示的是取模。

(通常取模運算中b不允許是負數,但是在python 2.5.1裡可以在%後面跟負數,因為python語言中除法的結果是向0捨入,因此計算結果是取模!)

example:

例如:計算-7 mod 4

那麼:a = -7;b = 4;

第一步:求整數商c,如進行取模運算c = -2(向負無窮方向捨入),取餘c = -1(向0方向捨入);

第二步:計算模和餘數的公式相同( r = a - c * b ),但因c的取值不同,取模時r = 1,取余時r = -3。

倘若讀者已經了解並掌握了兩者的區別,也就能很好的理解:「當我們賦值給乙個無符號型別,乙個超出它表示範圍的值時,結果是初始值對無符號型別表示數值總數取模後的餘數。」這句話。

例如, 8位元大小的unsigned char 可以表示0 至 255 區間內的值, 如果我麼賦值給此型別變數乙個區間以外的值,則實際的結果是該值對256取模後所得的餘數。 因此, 把 -1 賦值為8位元大小的unsigned char 所得的結果是255.

python模運算求餘 取模運算和取餘運算

取模運算和取餘運算 取模運算 modulo operation 和取餘運算 complementation 兩個概念有重疊的部分但又不完全一致。主要的區別在於對負整數進行除法運算時操作不同。取模主要是用於 計算機術語中。取餘則更多是數學概念。模運算在數論和程式設計中 都有著廣泛的應用,從奇偶數的判別...

Java中的取餘運算和取模運算

通常取模運算也叫取餘運算,他們都遵循處罰法則,返回結果都是餘數 但是仔細看是不一樣的,詳細請看例項 1.取餘 rem 3,2 1 rem 3,2 1 rem 3,2 1 rem 3,2 1 2.取模 mod 3,2 1 mod 3,2 1 mod 3,2 1 mod 3,2 1 由此可以看出,rem...

取模運算和求餘運算的區別

通常情況下取模運算 mod 和求餘 rem 運算被混為一談,因為在大多數的程式語言裡,都用 符號表示取模或者求餘運算。在這裡要提醒大家要十分注意當前環境下 運算子的具體意義,因為在有負數存在的情況下,兩者的結果是不一樣的。對於整型數a,b來說,取模運算或者求餘運算的方法都是 1.求 整數商 c a ...