震惊,取模和求余原来是不一样得

今天在偶然得一次机会知道取模和求余是不相同得。

对取余和取模定义不同的语言中,两者的不同点只有一个

  • 取余运算在计算商值向0方向舍弃小数位
  • 取模运算在计算商值向负无穷方向舍弃小数位

先自我总结一下它们得区别:

c=a/b;

在上面这个式子上知道,如果a和b得符号(不是类型是符号正负号)是一样得话,取模和求余是一样得,但是在a和b得符号不是一样得时候,取模是向下取整,而求余是向上取整。这个在哪里又不同那?

这个在涉及到负数得时候就会不同。(在这里提一下:余数只能是自然数,不能为负数),取模得话与b的符号相同,求余的话是与a的符号相同。上面的理由就是他们不同的原因。

  1. 取模(python里面是取模)

    • 5 mod 3 = 2 (5%3=2)
    • -5 mod 3 = 1  (向下取整)

5 mod -3 = -1

    • -5 mod -3 = -2
  1. 取余(c,c++,java里面都是取余)

    • 5 rem 3 = 2
    • -5 rem 3 = -2
    • 5 rem -3 = 2
    • -5 rem -3 = -2

  Java中我们如何实现取模呢?在Math中提供了这个函数Math.floorMod,用于我们进行取模,我们有下面的代码进行验证:


  public static void main(String[] args) {
        System.out.println("取模" + Math.floorMod(3, -5));
        System.out.println("求余" + 3 % -5);
    }
   // 取模-2
  //  求余3

参考了https://cloud.tencent.com/developer/article/1520164

https://blog.csdn.net/coder_panyy/article/details/73743722

如下俩位文档。

 

posted @ 2020-08-10 09:59  一个想飞的菜鸟  阅读(369)  评论(0编辑  收藏  举报