16进制如何取出分高位和低位_异或运算只具有两个输入逻辑变量

16进制如何取出分高位和低位_异或运算只具有两个输入逻辑变量为什么要先高16位异或低16位再取模运算

大家好,又见面了,我是你们的朋友全栈君。

我们知道,n代表的是table的长度length,之前一再强调,表table的长度需要取2的整数次幂,就是为了这里等价这里进行取模运算时的方便——取模运算转化成位运算公式:a%(2^n) 等价于 a&(2^n-1),而&操作比%操作具有更高的效率。
  当length=2n时,(length – 1)正好相当于一个”低位掩码”,”与”操作的结果就是散列值的高位全部归零,只保留低位,用来做数组下标访问:

16进制如何取出分高位和低位_异或运算只具有两个输入逻辑变量

可以看到,当我们的length为16的时候,哈希码(字符串“abcabcabcabcabc”的key对应的哈希码)对(16-1)与操作,对于多个key生成的hashCode,只要哈希码的后4位为0,不论不论高位怎么变化,最终的结果均为0。也就是说,如果支取后四位(低位)的话,这个时候产生”碰撞”的几率就非常大(当然&运算中产生碰撞的原因很多,这里只是举个例子)。为了解决低位与操作碰撞的问题,于是便有了第二步中高16位异或低16位的“扰动函数”。
右移16位,自己的高半区和低半区异或,就是为了混合原始哈希码的高位和低位,以此来加大低位随机性。

16进制如何取出分高位和低位_异或运算只具有两个输入逻辑变量

可以看到: 扰动函数优化前:1954974080 % 16 = 1954974080 & (16 – 1) = 0 扰动函数优化后:1955003654 % 16 = 1955003654 & (16 – 1) = 6 很显然,减少了碰撞的几率。

转载于:https://www.cnblogs.com/Profound/p/10879101.html

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106819.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 22、Windows10下局域网的两台电脑间传输文件

    22、Windows10下局域网的两台电脑间传输文件一、说明局域网内两台电脑传输文件使用windows自带的文件共享机制即可,不需要找专门的文件传输软件,下面来介绍使用方法。二、步骤1、控制面板2、网络和Internet3、网络和共享中心4、记住网络类型并点击更改高级共享设置5、根据对应的网络类型,在其下选择启用网络发现6、设置所有网络如下7、随便找一个文件夹设置为共享,这里在桌面新建一个名为“共享”的文件夹作文测试8、右击->属性->共享9、在其它电脑上访问自己的的文件夹,假设共享文件夹所在主机IP

    2022年5月4日
  • spring beanutils.copyproperties_bean property

    spring beanutils.copyproperties_bean property背景最近项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码。根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写了一个Request类,基本属性都是相同的,但是重点是有一个属性是静态内部类,还有两个是list属性,类似于下面这样:privateListorders;privateAddRequest.Tick…

    2022年9月27日
  • 自编R计算MSE(均方误差)[通俗易懂]

    自编R计算MSE(均方误差)[通俗易懂]基本原理1.生成关于x1~N(5,3),x2~N(100,10),error~N(0,1)2.自己定一个实际对线性回归模型,并计算得到真实的yy=1.5+0.8×1+1.8×2+error3.对x1,x2进行线性拟合,当然这里也可以自写函数用最小二乘法原理,进行参数对估计4.提取的每一个beta1,beta25.计算他的均方误差,计算公式代码k=100000#定义实验次数beta_x1=c()#定义空列beta_x2=c()for(iin1:k){

    2022年9月1日
  • visio2013首要事项闪退_visio一保存就闪退

    visio2013首要事项闪退_visio一保存就闪退问题描述visio2013安装完成后,新建流程图或者打开流程图,程序就会自动关闭,为了找到错误,我们打开“控制面板->事件查看器->windows事件日志”可以看到一个错误日志,错误如下:错误应用程序名称:VISIO.EXE,版本:15.0.4420.1017,时间戳:0x506742a9错误模块名称:VISLIB.dll,版本:15.0.4420.1017,时间戳:0x506741bc异常代码:0xc0000005错误偏移量:0x000000000010a887错

    2022年9月13日
  • DELL服务器数据恢复成功案例「建议收藏」

    DELL服务器数据恢复成功案例「建议收藏」DELLEqualLogicPS6100采用虚拟ISCSISAN阵列,为远程或分支办公室、部门和中小企业存储部署带来企业级功能、智能化、自动化和可靠性。以简化的管理、快速的部署及合理的价格满足了分支办公室和中小企业的存储需求,同时提供全套企业级数据保护和管理功能、可靠的性能、可扩展性和容错功能,是中型企业级存储的起点产品,但某些物理故障或其他操作都可能会对卷或存储造成破坏,因此对系列存储的数…

    2022年6月30日
  • 前后端分离架构概述「建议收藏」

    1、背景      前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这

    2022年4月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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