• 深度理解取余/取模运算


    日常编程经常会接触到取余/取模运算,那么计算机中取余/取模运算究竟是怎么定义的?

    P1:四种"取整"方式

    数学取整

    1.1 向0取整

    1. parseInt() 注意接受参数是string;所以调用该方法时存在类型转换
    2. parseInt(3.141592654) // 3

    1.2 向下取整

    1. Math.floor() 不四舍五入
    2. Math.floor(1.5555) // 1

    1.3 向上取整

    1. Math.ceil() 向上取整
    2. Math.ceil(1.5555) // 2
    3. Math.ceil(1.1555) // 2

    1.4 四舍五入取整

    1. Math.round() 四舍五入取整
    2. Math.round(1.5555) //2
    3. Math.round(1.4999) //1

    P2:用公式理解"取模"

    取模概念

    如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = q*d + r 且 0 ≤ r < d。其中,q 被称为商,r 被称为余数。

     运算符之 --- 取余运算 %

     

    P3:“取余”和“取模”一样吗?

    取整

    取余:尽可能让商,进行向0取整。

    取模:尽可能让商,向-∞方向取整。

    C中 % ,本质其实是取余。
    Python中 % ,本质其实是取模。

    理解链:

    对任何一个大于0的数,对其进行0向取整和-∞取整,取整方向是一致的。故取模等价于取余

    对任何一个小于0的数,对其进行0向取整和-∞取整,取整方向是相反的。故取模不等价于取余

    同符号数据相除,得到的商,一定是正数(正数vs正整数),即大于0!故,在对其商进行取整的时候,取模等价于取余。

    P4:总结

    • 浮点数(或者整数相除),是有很多的取整方式的,0向取整、(正、负)无穷向取整、四舍五入取整…
    • 如果 a 和 d 是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = q*d + r , q 为整数,且0 ≤ |r|< |d|。其中,q 被称为商,r 被称为余数
    • 在不同语言,同一个计算表达式,“取模”结果是不同的。我们可以称之为分别叫做正余数 和 负余数
    • 具体余数 r 的大小,本质是取决于商 q 的。而商,又取决于除法计算的时候,取整规则。
    • 取余 vs 取模:取余是尽可能让商,进行向 0 取整。取模是尽可能让商,向 -∞ 方向取整。
    • 参与取余的两个数据,如果同符号,取模等价于取余
    • 如果参与取余的两个数据符号不同,在C语言中(或者其他采用向0取整的语言如:C++,Java),余数符号,与被除数相同。(因为采用的向0取整)
  • 相关阅读:
    C++ 函数
    C/C++数据结构——公路村村通(Prim)
    npm介绍、常用命令详解以及什么是全局目录
    C语言之文件操作
    【Ubuntu】安装chrome之后无法启动
    vConsole调试工具的三种使用方式
    [数据结构]-二叉搜索树
    STM32CubeMX教程27 SDIO - 读写SD卡
    把这句话刻进脑子里
    LeetCode·每日一题·775.全局倒置与局部倒置·模拟
  • 原文地址:https://blog.csdn.net/weixin_48927323/article/details/127633144