因为计算的计算是基于二进制的,所以很多优化运行都离不开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