前言
對整數a,b來說,取余和取模的計算過程相同:
- 求整數商 c = a/b
- 計算模或者余數 r = a-c*b
區別在於第一步求商的方法:
- 取余運算,結果向0方向舍入
- 取模運算,結果向負無窮方向舍入
當a和b符號相同時,取余和取模結果沒有區別,符號不同時,結果不一致,取余結果的符號和a相同,取模結果的符號和b相同。以下面計算為例
-7 % 3
得到的浮點數商為 -2.333 左右,取余盡可能向0靠近,商為-2,取模盡可能向負無窮靠近,商為-3,所以取余結果為
-7-(-2)*3=-7-(-6)=-1
取模結果為
-7-(-3)*3=-7-(-9)=2
java,kotlin中的%為取余,python的%為取模。
java測試
java中也提供了取模的方法,Math.floorMod()。
public class TestMod {
public static void main(String[] args) {
System.out.println("=====取余");
System.out.println(7 % 3);
System.out.println(7 % -3);
System.out.println(-7 % 3);
System.out.println(-7 % -3);
System.out.println("=====取模");
System.out.println(Math.floorMod(7, 3));
System.out.println(Math.floorMod(7, -3));
System.out.println(Math.floorMod(-7, 3));
System.out.println(Math.floorMod(-7, -3));
}
}
輸出結果為
=====取余
1
1
-1
-1
=====取模
1
-2
2
-1
符合預期