在研究HashMap時,看到了取模方法,因此研究了下取模和取余的區別
一、取模與取余的區別
取模:mod,取余:rem
x | 7 | -7 | 7 | -7 |
y | -2 | 2 | 2 | -2 |
% | 1 | -1 | 1 | -1 |
mod | -1 | 1 | 1 | -1 |
當x和y的正負號一樣的時候,兩個函數結果是等同的;當x和y的符號不同時,rem函數結果的符號和x的一樣,而mod和y一樣。
這是由於這兩個函數的生成機制不同,rem函數采用fix函數,而mod函數采用了floor函數(這兩個函數是用來取整的,fix函數向0方向舍入,floor函數向無窮小方向舍入)。
即:當除數與被除數的符號相同時,rem和mod的結果是完全相同的;當除數與被除數的符號不相同時,結果不同。
具體而言,rem結果的符號與被除數相同;mod結果的符號與除數相同。
因為HashMap中的hash和length都是正數,所以取模和取余結果一樣。
二、Java中mod和%區別
類BigInteger中有取模(mod)和取余(remainder)方法
實例:
public static void main(String[] args) { // TODO Auto-generated method stub Map<Integer, Integer> map = new HashMap<>(); BigInteger b1, b2, b3, b4; b1 = new BigInteger("-7"); b2 = new BigInteger("2"); b3 = b1.mod(b2); b4 = b1.remainder(b2); System.out.println("b3: " + b3); System.out.println("b4: " + b4); int i1 = -7; int i2 = 2; int i3 = i1 % i2; System.out.println("i3: " + i3); }
結果:
通過取模mod()方法計算出來的值都是非負數,特別是取模里面的參數b2必須為正數。
但對取余remainder()方法中,對被除數和除數沒有特殊要求,只要求除數不能為零。(通過%求余出來的數值,正數、負數、0都可以。)
參考: