[Utils] 快速计算任意自然数附近的2的n次方数

2017-09-28  本文已影响94人  Cocoonshu

因为计算的计算是基于二进制的,所以很多优化运行都离不开2的n次方这个计算。比如文件系统扇区尺寸,GPU执行图像运算时的图像尺寸……

那如何快速找到离自然数A最近的一个2^n数?
介绍一个巧妙又快速的方法,见下文:

public static int nextPowerOf2(int num) {
    if (num <= 0 || num > (1 << 30)) {
        throw new IllegalArgumentException();
    }

    num -= 1;
    num |= num >> 16;
    num |= num >> 8;
    num |= num >> 4;
    num |= num >> 2;
    num |= num >> 1;
    return num + 1;
}

测试的结果如下:

nextPowerOf2(10) -> 8
nextPowerOf2(30) -> 32
nextPowerOf2(99) -> 128
nextPowerOf2(256) -> 256
上一篇 下一篇

猜你喜欢

热点阅读