This siteは、次のように回転ハッシュの説明を与えます。16ビットの回転ハッシュ
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];
配列のビット数に依存しない回転ハッシュ法をどのように書くべきですか? –