我的一本C#书籍( C#3.0 Cookbook Hillyard和Teilhet )给出了一个Square
类的例子写了GetHashCode
如
public override int GetHashCode ( )
{
return this.Height.GetHashCode() | this.Width.GetHashCode();
}
我想知道为什么这被认为是一个好的哈希码。因为|
操作的表是
x | y | x OR y
--------------
0 | 0 | 0
1 | 0 | 1
0 | 1 | 1
1 | 1 | 1
这意味着操作结果的3/4时间为1
。因此,如果您有其他int
s w, x, y, z
这意味着w | x == y | z
的可能性不小(例如,如果使用^
)。
我对此的理解是否正确?或者是否有充分理由将|
用于散列函数?
答案 0 :(得分:4)
这是一个可怕的,可怕的哈希函数,正是你提到的原因。当然是一个错误(或者你应该找一本新书!)。您应该将其提交到本书的勘误页:
http://www.oreilly.com/catalog/errata.csp?isbn=9780596516109