GetHashCode(key) & int.MaxValue
本文关键字:int MaxValue amp key GetHashCode | 更新日期: 2023-09-27 18:21:29
在浏览mscorlib.dll中通用Dictionary<TKey, TValue>
类的实现时,我注意到以下内容多次用于获取哈希密钥:
int num = this.comparer.GetHashCode(key) & int.MaxValue;
GetHashCode()返回一个int。我错误地认为int。MaxValue和任何整数x之间的逐位AND总是会返回x吗?
有人能解释一下为什么&运算符是否以上述方式使用?
int.MaxValue
的值为0x7FFFFFFF
——最高有效位为零。因此,当您使用另一个int执行逐位运算时,您实际上将"sign"位清零。注意,由于使用了二者的补码编码,-1不会变成1,而是2147483647。
显然,由于某些原因,代码示例中的num
变量中只允许使用正整数。
它不会影响正数
- [0,int.MaxValue]->保持不变
- [int.MinValue,-1]-->将更改符号位