在mscorlib.dll中浏览泛型Dictionary<TKey, TValue>
类的实现时,我注意到以下用了很多次来获取哈希键:
int num = this.comparer.GetHashCode(key) & int.MaxValue;
GetHashCode()返回一个int。我错误地认为int.MaxValue和任何整数 x 之间的按位AND将始终返回 x ?
有人可以解释为什么&amp;运算符是按上述方式使用的吗?
答案 0 :(得分:11)
int.MaxValue
的值为0x7FFFFFFF
- 最重要的位为零。因此,当您执行按位和另一个int时,您实际上将“符号”位置零。请注意,由于使用了two's complement编码,-1不会变为1,而是变为2,147,483,647。
显然,由于某些原因,代码示例中的num
变量只允许使用正整数。
答案 1 :(得分:2)
不会影响正数