【发布时间】:2013-01-03 21:36:18
【问题描述】:
我注意到hash function code 作为java.util.Hashtable#get(K key) 的一部分执行以下操作:int index = (hash & 0x7FFFFFFF) % tab.length;。这个二进制“与”操作是否仅用于重置符号位?从而避免负面的表访问。
更新:他们使用 0x7FFFFFFF 而不是 0xEFFFFFFF 的事实让我感到困惑。为什么符号需要一个完整的字节而不是一个位?
【问题讨论】:
-
索引必须是正数,通过清除最高位可以确定该值是正数。并且在
%之后会是积极的。 -
你的更新让我很困惑。 0xE 和 0x7 都有一个未设置的位。唯一的区别是哪个位未设置:E 是 1110(因此第四个最高有效位未设置),而 7 是 0111(因此最高有效位未设置)。符号位是最高有效位。
标签: java data-structures hash hashtable bit-manipulation