这么做的原因是找一个值, 这个值只要比 tab 的长度小就行了, 这样可以用来做为 tab 的索引值
你问题的答案可以参考
- Why does Java use (hash & 0x7FFFFFFF) % tab.length to decide the index of a key?
- https://stackoverflow.com/a/9380807/2227031
位运算符的作用可以参考
- Real world use cases of bitwise operators
- Understanding Bitwise Operators
用法总结有以下几种
- 加密, 压缩
- 使用 | 来同时使用多个选项, 例如 option1 | option2 | option3
- 使用 & 来判断奇数还是偶数, 例如 32 & 1
- 使用 ~ 来获得负数, 比如 ~3 + 1
- 使用 ^ 来交换两个变量的值, 例如
a = a^b;
b = a^b;
a = a^b;
- 使用 << 来向左偏移位, 比如 3 << 4 相当于 3 * (2 ^ 4) = 3 * 16 = 48
- 使用 >> 来向右偏移位, 比如 48 >> 4 相当于 48 / (2 ^ 4) = 48 / 16 = 3