我有一段奇怪的代码困扰着我,
// exbPtr points to 128-bit unsigned integer
// lgID is a "short" with 0xFFFF being the max value
int hash = (*exbPtr + (int)lgID * 9) & tlpLengthMask;
最初,这个实际上是一个数组的“哈希表”被初始化为 256 个元素,并且 tlpLengthMask 被设置为 255。
然后是这个神秘的代码.. 上面有一条评论说“如果我们到达这里.. 发生了碰撞”。然后它又开始循环回来,所以看起来这是一个哈希冲突,然后重新哈希?
hash = (hash + (int)lgID * 2 + 1) & tlpLengthMask;
此外,还有大量的调试代码说这个数组的长度应该是 2 的幂,因为我们使用掩码作为模数。
有人可以解释作者的意图是什么吗?这背后的原因是什么?
编辑——我试图辨别的是为什么他乘以 9,然后为什么乘以 2 来重新散列。