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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python矩阵转置方法大全

    Python矩阵转置方法大全文章目录矩阵转置矩阵转置matric=[[2,2,8],[0,4,0]]transpose=[[matric[j][i]forjinrange(len(matric))]foriinrange(len(matric[0]))]print(transpose)[[2,0], [2,4], [8,0]]

    2022年6月2日
    75
  • Java标识符的命名规则[通俗易懂]

    Java标识符的命名规则[通俗易懂]Java语言中,为各种变量、方法和类等起的名字称为标识符Java标识符的命名规则:应以字母、下划线、美元符开头后跟字母、下划线、美元符或数字Java标识符大小写敏感,长度无限制1.java中能用作标识符的有:26个英文字母(大、小写),数字,下划线,美元符号$。但是不能以数字开头。2.类名首个字母必须大写,多个单词组成的,每个单词首字母都要大写。3.方法名一般首个字母小写(构造…

    2022年7月8日
    35
  • 体验云计算的成果—-亚马逊免费云计算服务

    体验云计算的成果—-亚马逊免费云计算服务

    2022年1月19日
    52
  • python闭包详解_Python进阶

    python闭包详解_Python进阶闭包首先了解一下:如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用

    2022年7月31日
    7
  • js函数的回调

    js函数的回调平常的前端开发工作中,编写js时会有很多地方用到函数的回调。最简单的例子就是:<scriptlanguage=”javascript”type=”text/javascript”>functiondoSomething(callback){if(typeofcallback==”function”){callback();}}function…

    2022年5月9日
    54
  • 隐马尔科夫模型(HMM)与词性标注问题

    隐马尔科夫模型(HMM)与词性标注问题

    2021年11月19日
    30

发表回复

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

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