字符串hash ELFhash

来源:互联网 发布:淘宝suvi韩国是正品吗 编辑:程序博客网 时间:2024/04/28 01:10

 

  

 

    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