本文主要是介绍让星星⭐月亮告诉你,2的n次幂与二进制位全为1之间的联系,为啥只差一个1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现象:
2 ^ 3 = 8 = (1+2+4) +1 =(2 ^ 0+2 ^ 1+2 ^ 2)+1 即2 ^ 3 - 1=(2 ^ 0+2 ^ 1+2 ^ 2)
2 ^ 4 = 16 = (1+2+4+8) +1 =(2 ^ 0+2 ^ 1+2 ^ 2+2 ^ 3)+1 即2 ^ 4 - 1=(2 ^ 0+2 ^ 1+2 ^ 2+2 ^ 3)
观察上述现象,可以发现2的n次幂等于2的0次幂到2的(n-1)次幂的所有值相加后再加1.而2的0次幂到2的(n-1)次幂是连续的,对应到二进制的位里面从左往右第1到第n连续n个数,就全是连续的1啦,
在HashMap中计算数组下标时,就利用到了这一特性:数组长度为2 ^ n(通过HashMap的tableSizeFor(int cap)方法得以保证),在put(key,value)时,hash(key)&(2 ^ n-1),这样可以保证与hash(key)进行与的位运算时,能够充分的散列,使得添加的元素均匀分布到HashMap的每个位置上,减少hash碰撞
这篇关于让星星⭐月亮告诉你,2的n次幂与二进制位全为1之间的联系,为啥只差一个1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!