使用 & 进行高效率取余运算

使用 & 进行高效率取余运算

Java的HashMap源码中用到的(n-1)&hash这样的运算,这是一种高效的求余数的方法

结论:假设被除数是x,对于除数是2n的取余操作x%2n,都可以写成x&(2n-1),位运算效率高!

举例:259%8=259&7=3

原理:因为对8的取余结果肯定小于8

​ 在二级制中,8=(1000)2,因此取余结果肯定小于等于7=(0111)2

​ 因此对于被除数的二进制来说,只需要保证后三位保留下来即可(后三位保留下来肯定小于8)

​ 此时保存下来的结果就是取余结果

​ 259 : 1 0 0 0 0 0 0 1 1
​ 7 : 0 0 0 0 0 0 1 1 1

​ 要保存后面的三个数,就需要使用到位运算:(&运算中1&1=1,1&0=0,0&0=0)

​ 此时位运算结果:0 0 0 0 0 0 0 1 1

​ 转换为10进制就等于3!

注意:只有对于除数是2n,才可以使用此方法进行取余运算

公式: x%2n == x&(2n-1)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115179.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • centos7安装vsftp配置虚拟用户「建议收藏」

    centos7安装vsftp配置虚拟用户「建议收藏」安装前的准备关闭防火墙或者开端口权限。一般是firewalld或者iptables。systemctlstopfirewalldsystemctldisablefirewalld关闭sellinux立即关闭setenforce0重启也关闭vi/etc/selinux/config修改SELINUX=disabled查看是否关闭get

  • 罗技craft键盘使用方法_罗技g105键盘说明书

    罗技craft键盘使用方法_罗技g105键盘说明书引言:本文旨在为大家(程序员)快速入门罗技craft键盘,因为网上关于craft的测评缺乏深度,根本触及不到我的灵魂深处1.开箱咋样,是不是帅的雅痞?2.入门刚回来的几个小时,由满怀喜悦,到笑容逐渐凝固,再到内心毫无波澜,到最后奔溃后狂按键盘想退货。说起来,均是处于自己的无知。【因为此货用了京东白条六期】2.1软件下载记住了,安装完之后打开软件,千万千万别更新,别更新,别更新。——点击跳过就好了。因为有master2S,所以用的之前的安装包。官网下载是很慢的,差不多1个小时?推荐

    2022年10月15日
  • cuda编程-并行规约

    cuda编程-并行规约

  • tasker短信转发指定号码_短信转邮箱助手

    tasker短信转发指定号码_短信转邮箱助手起因更换手机号及手机后,原手机及手机号成为备用机。因为各种原因,无法弃用以及不能把原手机卡插到新手机里,故想转发备用机的短信及来电至新手机上工具taskerphp邮箱操作takser设置以短信为例,在tasker上新建一个配置文件,手都短信,任意并添加任务,名称随意,以方便自己识别为准。新建一个HTTPPOST操作,内容参考必要说明:mode=sms表示内容为短信,方便和电话等其它操作共用api…

  • BCG界面库_bcg模式什么意思

    BCG界面库_bcg模式什么意思本文以MDI应用程序为例说明如何在已有的VC++工程中使用BCG界面库,我的开发环境为VS2003。1,将BCG/BCGCBPro目录路径添加到“项目属性->C/C++->常规->附加包含目录”中,同时将BCG/Bin目录路径添加到“项目属性->链接器->常规->附加库目录”中。2,确保在CWinApp派生类(设为CMyApp)的InitInstance()成员函数中调用A

  • 五表权限_表格设置查看权限和编辑权限

    五表权限_表格设置查看权限和编辑权限设计基础:用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表联系上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。大致用到5张表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)。各表的大体表结构如下:1、用户表(UserInfo):Id、Use…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号