h & (length-1)
当length总是2的n次方时,h& (length-1)运算等价于对length取模,也就是h%length,但是&比%具有更高的效率。
所以,为什么h& (length-1)运算等价于对length取模?
实现的原理如下:
X % 2^n = X & (2^n - 1)
假设n为3,则2^3 = 8,表示成2进制就是1000。2^3 -1 = 7 ,即0111。
此时X & (2^3 - 1) 就相当于取X的2进制的最后三位数。
位与( & )
1 | public class Test { |
5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
1转换为二进制:0000 0000 0000 0000 0000 0000 0000 0001
位与:第一个操作数的第n位与第二个操作数的第n位如果都是1,那么结果的第n位也为1,否则为0