hashCode中的按位运算符>>>

Gau*_*rav 5 java hashcode bitwise-operators gethashcode effective-java

我有两个相关的问题:

  1. 按位运算符>>>表示我们正在将二进制数转移多个位置,同时在最高位填充0.但是,为什么以下操作产生相同的数字:5 >>> 32产生5和-5 >>> 32产生-5.因为如果上面的描述是正确的,那么这两个操作都会产生0作为最终结果.

  2. 在上面的继续中,根据Effective Java book,我们应该在计算哈希码时使用(int)(f ^(f >>> 32))(如果字段很长)(如果字段很长).为什么我们这样做,解释是什么

avr*_*mar 2

第一个问题的答案在这里,为什么 1>>32 == 1?

简而言之,第二个问题的答案是,以这种方式使用整个 long 值(而不是其中的一部分),并注意这可能是执行此操作的最快方法。