【发布时间】:2017-04-28 11:58:39
【问题描述】:
计算哈希码的标准方法是乘以 31。
布洛赫说:
选择值 31 是因为它是一个奇数素数。如果它是什 并且乘法溢出,信息将丢失,因为 乘以 2 与移位相同
我不确定我是否理解这一点。如果乘法溢出值丢失,无论偶数/奇数对吗?
在以下示例中,我不确定有什么区别:
int number = 2000000000;
System.out.println(Integer.toBinaryString(number));
number*=2;
System.out.println(Integer.toBinaryString(number));
1110111001101011001010000000000
11101110011010110010100000000000
和
int number = 2000000000;
System.out.println(Integer.toBinaryString(number));
number*=3;
System.out.println(Integer.toBinaryString(number));
1110111001101011001010000000000
1100101101000001011110000000000
【问题讨论】:
标签: java binary hashcode integer-overflow