我的一本 C# 书籍(C# 3.0 Cookbook by Hillyard and 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
并没有尽可能小(例如,如果使用了 ^
)。
我的理解是否正确?或者是否有充分的理由将 |
用于哈希函数?
最佳答案
那是一个可怕的、可怕的散列函数,正是因为你提到的原因。肯定是一个错误(或者你应该找一本新书!)。您应该将其提交到本书的勘误表页面:
http://www.oreilly.com/catalog/errata.csp?isbn=9780596516109
关于c# - 为什么 ORing 两个整数被认为是一个好的哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35967215/