让星星⭐月亮告诉你,2的n次幂与二进制位全为1之间的联系,为啥只差一个1

2024-05-14 14:08

本文主要是介绍让星星⭐月亮告诉你,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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988944

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

ccp之间是不可以直接进行+,-的,要用ccpSub和ccpAdd。

1.  http://www.cnblogs.com/buaashine/archive/2012/11/12/2765691.html  上面有好多的关于数学的方面的知识,cocos2dx可能会用到的 2.学到了   根据tilemap坐标得到层上物体的id int oneTiled=flagLayer->tileGIDt(tilePos);

1_CString char* string之间的关系

CString转char*,string string转char*,CString char* 转CString,string 一、CString转char*,string //字串转换测试 CString CString1; std::string string1; CHAR* char1=NULL; //1string1=CString1.GetBuffer();CStri

【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结

操作系统管理物理内存以及与外设磁盘硬件进行数据的交换 操作系统如何管理物理内存呢? 其实操作系统内核先对内存先描述再组织的!操作系统管理内存的基本单位是4KB,操作系统会为每一个4KB大小的物理内存块创建一个描述该4KB内存块的struct page结构体,该结构体存储着这4KB内存块的属性信息,通过管理struct page来对内存进行管理,page结构体的大小比较小,OS通常将它们组成一个

无法解决 equal to 运算中 Chinese_PRC_90_CI_AS 和 Chinese_PRC_BIN 之间的排序规则冲突

这是因为数据库 oa 和 hh 的编码格式不一样导致的 select  groupname as oper_id,name as oper_name from security_users where name collate Chinese_PRC_CI_AS not in (select oper_name from PDA_UsersAndPWD )

vue组件之间传值方式 vue父子组件传值传参方法

https://www.cnblogs.com/lingdu87/p/9147555.html vue组件之间传值方式解析一.父组件传到子组件 1.父组件parent代码如下: <template><div class="parent"><h2>{{ msg }}</h2><son psMsg="父传子的内容:叫爸爸"></son> <!-- 子组件绑定psMsg变量--></div></t

抽象类和接口之间的关系

1。类可以实现多个接口而只能继承一个超类。 2。抽象类可以有非抽象方法而接口的方法只能都是抽象的。 3。抽象类可以定义和使用变量而接口则不可以。 4。抽象类中的方法可以有各种不同的修饰符,而接口中的方法默认都是public,不允许字面定修饰符。 一个接口中的成员函数可以在不同的类中安装,而它的成员函数可以有很多种的实现方法,但是抽象类却不能象这样,它必须是由子类来继承,然后由子类来实现它的

iOS 视图之间的各种传值方式

属性传值 将A页面所拥有的信息通过属性传递到B页面使用 B页面定义了一个naviTitle属性,在A页面中直接通过属性赋值将A页面中的值传到B页面。 A页面DetailViewController.h文件 #import <UIKit/UIKit.h> #import "DetailViewController.h" @interface RootViewCon

Selenium Webdriver处理iFrame之间的切换问题

原文转自:https://blog.csdn.net/dongtianlaile/article/details/9854263 对于使用的iFrame技术的website, 使用xPath无法直接定位到元素,需要先切换到相应的frame再进行定位: [java]  view plain copy WebElement frame=driver.findElement(By.

「Debug R」明明我用的是数据框,为啥运行结果有点不对劲

在「Debug R」有些你认为的报错不是报错(error),是警告(warnnings)里,我解决了一个使用者在 tibble 数据结构赋予行名出现的问题。 这次问题和上次类似,也是没有注意到自己用的数据结构其实不是普通的数据框了,只不过这次的问题的主角是 data.table。 果子老师很喜欢用data.table的一个函数---fread, 它的读取速度非常快,而且使用非常方便,基本不怎么