为防止广告,目前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; }