私はこの線に沿って何かをGetHashCodeメソッドのいくつかの実装を.NETソース昨日のいくつかを見ていると見ました:ネットGetHashCodeメソッドビットシフト動作
(i1 << 5) + i^i2
が、私はコードがやって、なぜされているものを理解します。私が知りたいのは、(i1 < < 5)+ iの代わりに(i1 < < 5)-を使用した理由です。
私が見たほとんどのフレームワークは-iを使用しています。なぜならそれは素数である31で乗算するのと同じだからですが、マイクロソフトの方法は11と3を要素とする33を掛けることと等価です。
正当な理由がありますか?合理的な仮説?
Microsoftが33を使用する理由を知りました。これはBernstein Hashと呼ばれています。 33には、ハッシュコードの良い分布を生成するいくつかの魔法の性質があり、なぜか、理論的な知識はほとんどないことが分かります。 –