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

因为计算的计算是基于二进制的,所以很多优化运行都离不开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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容