我不明白为什么整数值“哈希”在 3 循环中/之后越来越低。
我猜这是因为 uint 限制是2,147,483,647
. 但是...当我尝试逐步进行时,该值等于2146134658
?。我数学不是很好,但应该低于限制。
#define FNV_PRIME_32 16777619
#define FNV_OFFSET_32 2166136261U
unsigned int hash_function(const char *string, unsigned int size)
{
unsigned int str_len = strlen(string);
if (str_len == 0) exit(0);
unsigned int hash = FNV_OFFSET_32;
for (unsigned int i = 0; i < str_len; i++)
{
hash = hash ^ string[i];
// Multiply by prime number found to work well
hash = hash * FNV_PRIME_32;
if (hash > 765010506)
printf("YO!\n");
else
printf("NOO!\n");
}
return hash % size;
}
如果您想知道这个 if 语句仅适用于我。
if (hash > 765010506)
printf("YO!\n");
else
printf("NOO!\n");
765010506
是下一次循环运行后的哈希值。