このサイトでは、回転ハッシュについて次のように説明しています。
unsigned rot_hash ( void *key, int len )
{
unsigned char *p = key;
unsigned h = 0;
int i;
for ( i = 0; i < len; i++ )
h = ( h << 4 ) ^ ( h >> 28 ) ^ p[i];
return h;
}
ここでは戻り値は 32 ビットです。ただし、16 ビットのハッシュ値を返したいです。そのためにはh
、ループ内で次のように代入するのが正しいでしょうか? h
ここでは 16 ビット整数として宣言されていることを考慮してください。
for ( i = 0; i < len; i++ )
h = ( h << 4 ) ^ ( h >> 12 ) ^ p[i];