GetHashCode(key)&int.MaxValue

MJ *_*son 7 .net c#

Dictionary<TKey, TValue>在mscorlib.dll中浏览泛型类的实现时,我注意到以下用了很多次来获取哈希键:

int num = this.comparer.GetHashCode(key) & int.MaxValue;
Run Code Online (Sandbox Code Playgroud)

GetHashCode()返回一个int.我错误地认为int.MaxValue和任何整数x之间的按位AND 将始终返回x?

有人可以解释为什么以上述方式使用&运算符?

Ond*_*cny 11

的值int.MaxValue是0x7FFFFFFF-最显著位为零.因此,当您执行按位和另一个int时,您实际上将"符号"位置零.请注意,由于使用了两个补码编码,-1不会变为1而是变为2,147,483,647.

显然,由于某些原因num,代码示例中的变量中只允许使用正整数.

  • 这样做的最可能的原因是将计算结果模数桶的值,以获得正确的桶.这不适用于负数. (4认同)