Я просматривал некоторые из источника .net вчера и видел несколько реализаций GetHashcode с чем-то вроде этого:
(i1 << 5) + i ^ i2
Я понимаю, что делает код и почему. Я хочу знать, почему они использовали (i1 < 5) + я вместо (i1 < 5) - i.
Большинство фреймворков, которые я видел, используют -i, потому что это эквивалентно умножению на 31, что является простым, но способ Microsoft эквивалентен умножению на 33, который имеет 11 и 3 в качестве факторов и, следовательно, не является простым.
Есть ли известное обоснование для этого? Любые разумные гипотезы?