向上取2^N的整

参考资料:
Java8 HashMap之tableSizeFor

有时会看到类似下面的代码,说是向上取整为2N,原理见参考资料...,在cap输入232以内的数都可以实现效果,大于就不行了,MAXIMUM_CAPACITY为2^30

static final int tableSizeFor(int cap) {
    int n = cap - 1;
    n |= n >>> 1;
    n |= n >>> 2;
    n |= n >>> 4;
    n |= n >>> 8;
    n |= n >>> 16;
    return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}

你可能感兴趣的:(向上取2^N的整)