为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。

ELFHash

来自NOCOW
跳转到: 导航, 搜索

PASCAL:

function ElfHash(s:string):longint;
var 
  i,num,g:longint;
begin
  num:=0;
  for i:=1 to length(s) do
    begin
      num:=(num shl 4)+ord(s[i]);{将hash值左移4位后加上字符ascii}
      g:=num and $f0000000;      {取出hash值的高4位}
      if g<>0 then {因为下一步仍要左移4位,所以如果高4位不为0,进行下面处理,防止丢失信息}
        num:=num xor (g shr 24);{将高4位与5~8位xor}
      num:=num and (not g);
    end;
  ElfHash:=num;
end;

C++:

long elfhash(char *str) {
 
	int i=0;
	long g,sum=0;
	while (*str)
	{
		sum=(sum<<4)+((*str++)-97+1);//将hash值左移4位后加上字符ascii
		g=sum & 0xf0000000;//取出hash值的高4位
		if (g) sum^=g>>24;//因为下一步仍要左移4位,所以如果高4位不为0,进行下面处理,防止丢失信息 将高4位与5~8位xor
		sum&=~g;//消除下次可能被移到符号位的4个位
		i++;
	}
	return sum%M;
}
个人工具