RokcetMq源码中%是求余还是取模

这篇文章主要讲解了“RokcetMq源码中%是求余还是取模”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RokcetMq源码中%是求余还是取模”吧!

成都创新互联公司是一家专业提供七里河企业网站建设,专注与成都网站设计、网站建设、H5页面制作、小程序制作等业务。10年已为七里河众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

背景

很多同学看见我的这个标题,不禁会说到:你这个是在逗我么,求余和取模不是一回事吗?是的再前不久之前我和你们的感受一样,求余和取模难道不是一个玩意?直到有一天有一个群友再阅读RokcetMq源码的时候,发现了下面一段代码:

private static int initValueIndex() {
       Random r = new Random();

       return Math.abs(r.nextInt() % 999) % 999;
   }

求余还是取模

我们仔细看上面的代码发现使用了Math.abs,这个函数代表取绝对值,那就意味着和符号有关系,虽然这里的r.nextInt不可能为负数,可能当时的开发人员理解这个函数可能会出现负数(实际上r.nextInt不会出现负数)于是进行了取绝对值。

那这个又和我们的标题 求余和取模有什么关系呢? 别着急我们先来看下面的一个公式:

1.求整数商: c = a/b;

2.计算模或者余数: r = a - c*b.

不论是求余和取模都是使用这两个公式进行计算,但是他们在第一步求整数商的时候却不同,求余运算在取c值的时候向0方向舍入,取模运算在计算c值的时候,向无穷小方向舍入,这里要注意的是求余运算不是向无穷大舍入,为什么呢,因为在a和b符合都一致的时候,他们都会向下取整,但是a,b符号不一样的时候求余就会向上取整,取模就会向下取整,最后就会出现取模运算符和b一致,求余预算会和a一样。

一般来说c,c++,java '%' 号代表都是求余,python是取模。

而我们上面那段代码中作者明显是想实现取模,也就是当b是正数的时候那么取模的值会一直为正。

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

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

可以看见输出和我们预期相符。

感谢各位的阅读,以上就是“RokcetMq源码中%是求余还是取模”的内容了,经过本文的学习后,相信大家对RokcetMq源码中%是求余还是取模这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!

文章标题:RokcetMq源码中%是求余还是取模
URL地址:https://www.cdcxhl.com/article20/jgshco.html

成都网站建设公司_创新互联,为您提供软件开发动态网站定制网站品牌网站制作关键词优化网站策划

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营