1. 程式人生 > >取模與取餘的區別

取模與取餘的區別

轉載地址:https://blog.csdn.net/coder_panyy/article/details/73743722 
 

其實取模和取餘在目標上是一致的,但是因為語言對取餘和取模上定義的不同,導致得到的結果不同。

對取餘和取模定義不同的語言中,兩者的不同點只有一個

取餘運算在計算商值向0方向捨棄小數位
取模運算在計算商值向負無窮方向捨棄小數位
同時,也可以這樣理解:

  • 取餘,遵循儘可能讓商大的原則
  • 取模,遵循儘可能讓商小的原則

從上面的區別可以總結出,取餘(rem)和取模(mod)在被除數、除數同號時,結果是等同的,異號時會有區別,所以要特別注意異號的情況。

下面來看一些例子

取模

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

  • 經過測試,在C/C++, C#, JAVA, PHP這幾門主流語言中,’%’運算子都是做取餘運算,而在python中的’%’是做取模運算。

此外,餘數在數學中的定義是始終大於等於0的,而對於某些程式語言的取餘運算不是按照上面的定義來執行的,因此才會出現餘數小於0的情況。

說了這麼多,我們在使用取模(取餘)運算時要注意的地方有一個,當除數和被除數出現異號的情況時,程式移植的時候要特別小心,因為不同語言對取模和取餘的定義可能是不同的。

部分參考:http://blog.csdn.net/chensilly8888/article/details/42834697