取模和取余的区别

在研究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和%区别 

猜你喜欢

转载自www.cnblogs.com/zeroingToOne/p/9084977.html
今日推荐