位与

以前在看源码的时候,有很多地方设置长度或则值为2的N次幂,当时不知道为什么?

今天看HashedWheelTimer代码时

private static int normalizeTicksPerWheel(int ticksPerWheel) {
    int normalizedTicksPerWheel = 1;
    while (normalizedTicksPerWheel < ticksPerWheel) {
        normalizedTicksPerWheel <<= 1;
    }
    return normalizedTicksPerWheel;
}

以上代码中normalizeTicksPerWheel得出环的大小,取了一个大于等于ticksPerWheel且是2的N次幂的整数。为啥要取成2的N次幂呢?主要是因为在大小而2的N次幂的环上求索引非常的方便,a & (b-1) = a % b,当b时2的N次幂时成立。

为什么要用按位取与,不用%取余?

由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快

常用技巧

a & (b-1) = a % b,当b时2的N次幂时成立。

猜你喜欢

转载自blog.csdn.net/u012092620/article/details/79951339