字符串hash ELFhash

 

  

 

    ELFhash,一种对字符串求hash值的函数,最后模槽数。

 

    h(hash)是最后求得的hash值,对字符串中每一个字符进行遍历。

    思路:每次h左移四位,将key的ASCII放入。由于long32位,当存到第7个字符的时候,最高的4位被填满了,下一次再左移4位就会发生数据丢失,因此,要处理这种情况。

    unsigned long g=h&0xf0000000L;这一行 ,g存的是h的最高4位,0xf0000000=11110000000000000000000000000000,4个1,28个0,这样&过就是最高4位。

   如果最高4位有值,首先将g右移24位,然后和h异或得到新值,这样,溢出的可能就被处理掉,然后h&=~g;最高4位清0,~g和h的高4位每一位相反,&上就是0,。

最终模上槽位,求出哈希值。

     int ELFHash(char * key)
{
 unsigned long h=0;
 while(*key)
 {
  h=(h<<4)+*key++;
  unsigned long g=h&0xf0000000L;
  if(g)
  {
   h^=(g>>24);
   h&=~g;
  }
 }
 return h%M;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值