Chinaunix首页 | 论坛 | 博客
  • 博客访问: 415849
  • 博文数量: 61
  • 博客积分: 1991
  • 博客等级: 上尉
  • 技术积分: 492
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-08 12:28
文章分类

全部博文(61)

文章存档

2011年(5)

2010年(21)

2009年(3)

2008年(4)

2007年(28)

我的朋友

分类: C/C++

2010-04-15 10:37:17

1、ELFHash

unsigned int ELFHash( char * str) { unsigned int hash = 0 ; unsigned int x = 0 ; while ( * str) { hash = (hash < < 4 ) + ( * str ++ ); //hash值左移4位加上一个字符 if ((x = hash & 0xF0000000L ) != 0 )//判断hash值的高4位是否不为0,因为不为0时需要下面特殊处理,否则上面一步的左移4位会把这高四位给移走,造成信息丢失 { hash ^= (x >> 24 ); //把刚才的高4位跟hash的低5-8位异或 hash &= ~ x; //把高4位清0 } } return (hash & 0x7FFFFFFF ); //希望hash值是一个非负数 }

2、限定下标最大值的EFLHash
unsigned int ELFHash( char * str, unsigned int max) { unsigned int hash = 0 ; unsigned int x = 0 ; while ( * str) { hash = (hash < < 4 ) + ( * str ++ ); //hash值左移4位加上一个字符 if ((x = hash & 0xF0000000L ) != 0 )//判断hash值的高4位是否不为0,因为不为0时需要下面特殊处理,否则上面一步的左移4位会把这高四位给移走,造成信息丢失 { hash ^= (x >> 24 ); //把刚才的高4位跟hash的低5-8位异或 hash &= ~ x; //把高4位清0 } } return (hash & 0x7FFFFFFF ) % max; //希望hash值是一个非负数 }
阅读(1296) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~