取模
5 mod 3 = 2
-5 mod 3 = 1
5 mod -3 = -1
-5 mod -3 = -2
取余
5 rem 3 = 2
-5 rem 3 = -2
5 rem -3 = 2
-5 rem -3 = -2
1.取余
rem(3,2)=1
rem(-3,-2)=-1
rem(3,-2)=1
rem(-3,2)=-12.
取模
mod(3,2)=1
mod(-3,-2)=-1
mod(3,-2)=-1
mod(-3,2)=1
由此可以看出,rem和mod是有符號區別的!
當除數與被除數的符號相同時,rem和mod的結果是完全相同的;當除數與被除數的符號不相同時,結果不同。
具體說,rem結果的符號與被除數相同;mod結果的符號與除數相同。
經過測試,在C/C++, C#, JAVA, PHP這幾門主流語言中,’%’運算符都是做取余運算,而在python中的’%’是做取模運算。
此外,余數在數學中的定義是始終大於等於0的,而對於某些編程語言的取余運算不是按照上面的定義來執行的,因此才會出現余數小於0的情況。
取余
m%n
取模
(m%n+n)%n
其實取模和取余在目標上是一致的,但是因為語言對取余和取模上定義的不同,導致得到的結果不同。
對取余和取模定義不同的語言中,兩者的不同點只有一個
取余運算在計算商值向0方向舍棄小數位
取模運算在計算商值向負無窮方向舍棄小數位
同時,也可以這樣理解:
取余,遵循盡可能讓商大的原則
取模,遵循盡可能讓商小的原則
經過測試,在C/C++, C#, JAVA, PHP這幾門主流語言中,’%’運算符都是做取余運算,而在python中的’%’是做取模運算。
此外,余數在數學中的定義是始終大於等於0的,而對於某些編程語言的取余運算不是按照上面的定義來執行的,因此才會出現余數小於0的情況。
說了這么多,我們在使用取模(取余)運算時要注意的地方有一個,當除數和被除數出現異號的情況時,程序移植的時候要特別小心,因為不同語言對取模和取余的定義可能是不同的。