Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1137906
  • 博文数量: 254
  • 博客积分: 1242
  • 博客等级: 少尉
  • 技术积分: 1581
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-03 21:49
文章分类

全部博文(254)

文章存档

2017年(16)

2016年(4)

2013年(94)

2012年(140)

分类:

2012-11-30 15:32:55

原文地址:ELFHash 作者:happy1123

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值是一个非负数 }
阅读(867) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~