zoukankan      html  css  js  c++  java
  • 取模和取余的区别

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

  • 相关阅读:
    CruiseControl.NET 三言两语
    在MFC程序中增加控制台
    VS2005 编译Release版本出现清单文件的错误
    内存泄露问题
    软件设计原则
    boost::shared_ptr 分析与实现
    corelDraw 的CDR格式解析
    13. 量词操作符—【LINQ标准查询操作符】
    SQL SERVER执行查询的顺序
    CSLA命令对象的简单封装
  • 原文地址:https://www.cnblogs.com/zeroingToOne/p/9084977.html
Copyright © 2011-2022 走看看