之前我的認知裏一直以爲取餘和取模是一回事,直到那天他們在討論關於這個,才意識到並不是這樣,這裏進行總結一下。
在數學裏面,我們接觸到的餘數都是大於0的,但在編程中,就會存在有正有負的情況。編程中,這兩種計算的機制不同,Mod採用fix函數,Rem採用floor函數,這兩函數都是用來取整的,fix向0方向舍入,floor向無窮小方向舍入。
取模(Mod)和取餘 (Rem)我們都是用 " % "來表示
首先,他們的區別是:
取餘:向0方向捨棄小數位,遵循儘可能讓商大的原則。
取模:向負無窮方向捨棄小數位,遵循儘可能讓商小的原則。
在商和除數同號時,取模和取餘 的結果是相同的。
看幾個栗子:
取餘 | 取模 | |
---|---|---|
3%2 | 1 | 1 |
-3%-2 | -1 | -1 |
-3%2 | -1 | 1 |
3%-2 | 1 | -1 |
總結:取餘運算的結果正負性和除數保持一致,取模運算結果和被除數保持一致。
不同編譯語言對應的"%"所代表的含義不同,
取模運算 | python |
---|---|
取餘運算 | C/C++、C#、Java、Golang、PHP |
因此在程序移植時我們要注意到這一點。