使用 & 进行高效率取余运算
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)
使用 & 进行高效率取余运算的更多相关文章
- 洛谷 P1226 【模板】快速幂||取余运算
题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...
- 洛谷P1226 【模板】快速幂||取余运算
题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 S1: ...
- php取余运算(%) 注意事项
<?php //php取余运算(%)的那点事,php取余数用%符号,即为模运算 //理论上应该输出45才对,可是实际运算结果是44 $val=9.45; $result=$val*100; ec ...
- LuoguP1226 【模板】快速幂||取余运算
题目链接:https://www.luogu.org/problemnew/show/P1226 第一次学快速幂,将别人对快速幂原理的解释简要概括一下: 计算a^b时,直接乘的话计算次数为b,而快速幂 ...
- 快速幂 cojs 1130. 取余运算
cojs 1130. 取余运算 ★ 输入文件:dmod.in 输出文件:dmod.out 简单对比时间限制:10 s 内存限制:128 MB [题目描述] 输入b,p,k的值,求b^p ...
- 洛谷——P1226 取余运算||快速幂
P1226 取余运算||快速幂 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod ...
- 为什么Java的hash表的长度一直是2的指数次幂?为什么这个(hash&(h-1)=hash%h)位运算公式等价于取余运算?
1.什么是hash表? 答:简单回答散列表,在hash结构散列(分散)存放的一种数据集结构. 2.如何散列排布,如何均匀排布? 答:取余运算 3.Java中如何实现? 答:hash&(h-1) ...
- python 取余运算
python中取余运算逻辑如下: 如果a 与d 是整数,d 非零,那么余数 r 满足这样的关系: a = qd + r , q 为整数,且0 ≤ |r| < |d|. 经过测试可发现,pytho ...
- codevs 1497取余运算
1497 取余运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamon 题目描述 Description 输入b,p,k的值,编程计算bp mod k的值. ...
随机推荐
- IBM java开发面试题
1.commite在什么场合使用 svn 提交项目 数据库自动提交 Oracle手动,mysql自动 2.void(0)怎么使用 html界面 <a href="javaScript ...
- mybatis介绍以及配置
一.概念 1.作用:简化dao层,是框架的一部分,常叫SSM,或SSI 2.历史:之前的版本叫ibatis,三版之后叫mybatis 3.什么是orm?object,relational,mappin ...
- 第一篇 -- Sprint Tool Suite配置和Hello World编写
首先需要安装 1. Sprint Tool Suite(本次所用版本:spring-tool-suite-3.8.3.RELEASE-e4.6.2-win32-x86_64) 2. Tomcat(本次 ...
- Charles抓包工具永久破解+https抓包需要安装安全证书+防止请求乱码
1.charles4.5.6版本安装+永久破解 链接:https://pan.baidu.com/s/1Z49AE6TG2IXUY-7qoyGU4g 提取码:3i97 安装好charles之后,把下载 ...
- 斐波那契数列——Python实现
# 功能:求斐波那契数列第 n 个数的值 # 在此设置 n n = 30 print('\n');print('n = ',n) # 代码生成 Fibonacci 序列,存于数组A A = [0] ...
- Django JSONField/HStoreField SQL注入漏洞(CVE-2019-14234)
复现 访问http://192.168.49.2:8000/admin 输入用户名admin ,密码a123123123 然后构造URL进行查询,payload: http://192.168.49. ...
- Java中泛型的详细解析,深入分析泛型的使用方式
泛型的基本概念 泛型: 参数化类型 参数: 定义方法时有形参 调用方法时传递实参 参数化类型: 将类型由原来的具体的类型参数化,类似方法中的变量参数 类型定义成参数形式, 可以称为类型形参 在使用或者 ...
- shell的图形排列
目录 一.矩形 二.直角三角形 三.倒直角三角形 四.靠右的直角三角形 五.等腰三角形 六.平行四边形 七.等腰梯形 八.菱形 九.可变动菱形 一.矩形 二.直角三角形 三.倒直角三角形 四.靠右的直 ...
- Recuva ——天下第一的删除恢复应用
天下第一的删除恢复应用 下载地址 http://www.onlinedown.net/soft/66224.htm 实名diss那个垃圾 易得恢复 98一年,真是趁火打劫(跟个老鼠一样, ...
- Elasticsearch之深入理解
@ 目录 ES应用场景 ES应用场景举例 应用场景思考 ES和其他数据库对比 ES架构 Gateway Lucene 数据处理 发现机制与脚本 Transport REST full API ES中集 ...