Для >>> 32: long и double - 64 бита, а int - 32 бита, поэтому для получения результата int, как только должно произойти смещение 32, необходимо сохранить информацию.
Умножение 31 является типичной техникой. 31 - простое число, и повторное умножение в пределах 2 ^ 32 будет повторять все значения. Так что это отлично подходит для хеширования. (В общем)