【发布时间】:2013-05-18 02:24:28
【问题描述】:
unsigned int HashString( const char *string ) {
const char* p;
unsigned hash = 40503;
for ( p = string; *p != '\0'; ++p ) {
hash += *p;
hash += ( hash << 10 );
hash ^= ( hash >> 6 );
}
hash += ( hash << 3 );
hash ^= ( hash >> 11 );
hash += ( hash << 15 );
return hash;
}
只是在他们的代码上徘徊。不过,我以前从未见过这样的散列函数。
对于按位运算,我不是太老练,我知道位移和掩码的工作原理,但仅限于基本场景,例如检查位是否已设置。
这究竟是做什么的?
【问题讨论】:
-
它按照它所说的去做。问题到底是什么?任何关于 C 或 C++ 的基本教科书都会解释语言中的运算符是什么。
-
谷歌“线性反馈移位寄存器”。
-
@Kerrek 我想我的问题是它的哈希值究竟如何?我知道散列函数的目标是什么,但这究竟是一个好的散列?