取模和取余的區別


在研究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都可以。)

參考:

取模(mod)與取余(rem)的區別 

Java中mod和%區別 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM