О целочисленном умножении, переполнении и потере информации

Я читаю Главу 3 книги Джошуа Блоха Effective Java. В пункте 8: Always override hashCode when you override equals, автор использует следующий шаг объединения в своей функции хэширования:

result = 37 * result + c;

Затем он объясняет, почему было выбрано 37 (выделено автором):

Множитель 37 был выбран потому, что это нечетное простое число. Если бы он был четным и умножение переполнилось бы, информация была бы потеряна, потому что умножение на два эквивалентно сдвигу. Преимущества использования простого числа менее очевидны. но традиционно для этой цели используются простые числа.

Мой вопрос: почему важно, что объединяющий фактор (37) является нечетным? Разве переполнение при умножении не приведет к потере информации независимо от того, четный или нечетный коэффициент?

14
задан Bill the Lizard 20 December 2011 в 15:14
поделиться