C和Python中取模運算

2021-10-18 19:00:37 字數 1791 閱讀 4733

最近再看python的相關書籍

突然發現python中的%(一般叫做取模運算)和c中的%(一般叫做取餘運算)不一樣

自己查了點資料,做了一下總結

首先要說一下不同的取整方式

取整方式分為三類:向上取整,向下取整,向零取整

1.向上取整:向+∞方向取最接近精確值的整數。

在這種取整方式下,5 / 3 = 2, -5 / -3 = 2, -5 / 3 = -1, 5 / -3 = -1

2.向下取整:向-∞方向取最接近精確值的整數。

在這種取整方式下,5 / 3 = 1, -5 / -3 = 1, -5 / 3 = -2, 5 / -3 = -2

3.向零取整:向0方向取最接近精確值的整數。

在這種取整方式下,5 / 3 = 1, -5 / -3 = 1, -5 / 3 = -1, 5 / -3 = -1

不管是c還是python,對於整數a和b進行取模運算和取餘運算可以總結分為2個步驟:

1.計算整數商: c=取整(a/b),此處的a/b可以理解為數學意義上的除法

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

兩者的區別就在於第 1 步中的計算整數商不同,也就是c和python採用了不同的取整方式

r=a-(a/b)*b,其中對於除法a/b,不同的語言採用不同的方式

c採用的是向零取整,python採用的是向下取整

根據上面的規則,c中的取餘運算:

5%3

=2/* 根據公式r=5-(5/3)*3,其中5/3採用的是向零取整,結果為1,所以r=5-1*3=2 */-5

%-3=

-2/* 根據公式r=-5-(-5/(-3))*(-3),其中-5/(-3)採用的是向零取整,結果為1,所以r=-5-1*(-3)=-2 */-5

%3=-

2/* 根據公式r=-5-(-5/3)*3,其中-5/3採用的是向零取整,結果為-1,所以r=-5-(-1)*3=-2 */5%

-3=2

/* 根據公式r=5-(5/(-3))*(-3),其中5/(-3)採用的是向零取整,結果為-1,所以r=5-(-1)*(-3)=2 */

通過觀察發現,c中取餘運算的結果的符號和被除數一致

同樣,python的取模運算:

5%3

=2/* 根據公式r=5-(5/3)*3,其中5/3採用的是向下取整,結果為1,所以r=5-1*3=2 */-5

%-3=

-2/* 根據公式r=-5-(-5/(-3))*(-3),-5/(-3)採用向下取整,結果是1,所以r=-5-1*(-3)=-2 */-5

%3=2

/* 根據公式r=-5-(-5/3)*3,-5/3採用向下取整,結果是-2,所以r=-5-(-2)*3=1 */5%

-3=-

2/* 根據公式r=5-(5/(-3))*(-3),5/(-3)採用向下取整,結果是-2,所以r=5-(-2)*(-3)=-1 */

通過觀察可以發現,python中取模運算的結果的符號與除數一致

注意python的除法有很多:

整除://,向下取整

浮點數除法:/,返回浮點數

強制型別轉換取整:int(),向零取整

我們這裡說的整除是//,即向下取整

也就是說,對於python,取模運算的公式應該為:r=a-(a//b)*b

還有順便吐槽一下,csdn的編輯器是真的難用!!!

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

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

Python中的取模運算

所謂取模運算,就是計算兩個數相除之後的餘數,符號是 如a b就是計算a除以b的餘數。用數學語言來描述,就是如果存在整數n和m,其中0 m b,使得a n b m,那麼a b a n b m.取模運算的兩個運算元都必須是整數,可以是負整數,但是b不可以是0,因為被除數不能為0嘛。當a和b中存在負整數時...

C 取模運算

取模運算要求兩個運算元都是整數或者能隱式地轉換成整數型別。如果兩個運算元不是整數,且不能隱式地轉換成整數,將發生編譯錯誤,例如 cout 5.4 3取模運算結果的正負是由左運算元的正負決定的。c99標準規定 如果 左運算元是正數,那麼取模運算的結果是非負數 如果 左運算元是負數,那麼取模運算的結果是...