GetHashCode(key)& int.MaxValue

时间:2012-01-27 01:10:01

标签: c# .net

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

int num = this.comparer.GetHashCode(key) & int.MaxValue;

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

有人可以解释为什么&amp;运算符是按上述方式使用的吗?

2 个答案:

答案 0 :(得分:11)

int.MaxValue的值为0x7FFFFFFF - 最重要的位为零。因此,当您执行按位和另一个int时,您实际上将“符号”位置零。请注意,由于使用了two's complement编码,-1不会变为1,而是变为2,147,483,647。

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

答案 1 :(得分:2)

不会影响正数

  • [0,int.MaxValue] - &gt;保持不变
  • [int.MinValue,-1] - &gt;将改变标志位