Mientras navega por la implementación de la clase genérica Dictionary<TKey, TValue>
en mscorlib.dll, me di cuenta de las siguientes muchas veces utilizadas para obtener un hash de clave: GetHashCodeGetHashCode (llave) y int.MaxValue
int num = this.comparer.GetHashCode(key) & int.MaxValue;
() regresa un int. ¿Me equivoco al pensar que un AND a nivel de bits entre int.MaxValue y cualquier número entero x, siempre devolverá x?
¿Alguien puede explicar por qué el operador & se utiliza de la manera anterior?
La razón más probable para hacer esto es que se calculará el valor del número de módulo de resultado de cubos para obtener el depósito correcto. Eso no funcionaría bien para números negativos. – svick
Estaría dispuesto a apostar todo un dólar que a la implementación del Diccionario en .NET no le importa si el código es positivo o negativo, y que la persona que escribió el código lo está haciendo en un intento (probablemente desacertado) para tratar de evitar la coincidencia de factores primos con el número de segmentos: http://stackoverflow.com/questions/3613102/why-use-a-prime-number-in-hashcode –
@Chris: según el OP, ese código * es * de la implementación .NET 'Dictionary'. Como lo sugiere svick, es probable que se asegure de que el número de segmento (un índice de matriz, iirc) siempre sea positivo. –
LukeH