首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

% 还是取模,傻傻分不清楚

背景 很多同学看见我的这个标题,不禁会说到:你这个是在逗我么,和取模不是一回事吗?是的再前不久之前我和你们的感受一样,和取模难道不是一个玩意?...直到有一天有一个群友再阅读RokcetMq源码的时候,发现了下面一段代码: private static int initValueIndex() { Random r = new Random...不论是和取模都是使用这两个公式进行计算,但是他们在第一步整数商的时候却不同,运算在取c值的时候向0方向舍入,取模运算在计算c值的时候,向无穷小方向舍入,这里要注意的是运算不是向无穷大舍入,...为什么呢,因为在a和b符合都一致的时候,他们都会向下取整,但是a,b符号不一样的时候就会向上取整,取模就会向下取整,最后就会出现取模运算符和b一致,预算会和a一样。...总结 虽然'%'是还是取模在我们大多时候都不需要过于关注,即使关注了可能也我们的技术帮助不了太多。

3.6K31

由HashMap哈希算法引出的%和与运算&转换问题

HashMap  的源码实现时,有如下几点:   ①、初始容量为 1<<4,也就是24 = 16   ②、负载因子是0.75,当存入HashMap的元素占比超过整个容量的75%时,进行扩容,而且在不超过int...hash(Object key) { 2 int h; 3 return (key == null) ?...公式   不成立:a÷(b+c)≠a÷c+b÷c   通过 3-1公式以及 3-2 公式,我们可以得出当任意一个十进制除以一个2k的数时,我们可以将这个十进制转换成3-1公式的表示形式:   如果我们想上面公式的余数...再回到上面说的二进制的移位操作,向右移 n 位,表示除以 2n 次方,由此我们得到一个很重要的结论: 一个十进制数一个2n 的数取,我们可以将这个十进制转换为二进制数,将这个二进制数右移n位,移掉的这...所以任意一个二进制数 2k 取时,我们可以将这个二进制数与(2k-1)进行按位与运算,保留的即使余数。

1.5K30

树状数组逆序以及相关例题

逆序有两种方法:归并排序和树状数组,但是归并排序求得的逆序是总共的逆序对数量,有些时候我们需要求得某个数后面的逆序对数量或者某个数前面的逆序对数量。...这个时候我们就需要使用树状数组来逆序,使用树状数组的优势在于码量少,容易调试。但是如果值域大的话,需要进行离散化。...树状数组逆序的核心代码如下: //sum[i]为位置i的逆序对数量 for(int i=n;i>=1;i--){ sum[i]=query(a[i]-1); //查询该数字后面是否存在比它小的数...add(a[i],1) //从a[i]到N的个数加1 } 这样就可以求出来每个数字后面的逆序。...要求每个数字前面的逆序,则反着来即可。 下面以一道题目为例子 题意描述 题目链接 [题目描述] 思路 通过观察发现:首先每个小朋友交换的次数是固定的,所以先交换哪个小朋友都是可以的。

55100
领券