昨天同事问我有啥好算法来计算“最接近且大于等于某个正整数的2的整数次幂”
用二进制思考比较容易:找到某个正整数二进制表示中最高为1的位r。如果这个数是2的整数次幂,
那么所求就是它本身,否则就是2^(r+1)。
翻了翻Intel CPU的指令集,找到如下指令:

正好可用
用二进制思考比较容易:找到某个正整数二进制表示中最高为1的位r。如果这个数是2的整数次幂,
那么所求就是它本身,否则就是2^(r+1)。
翻了翻Intel CPU的指令集,找到如下指令:

正好可用

输出:
256
256
512
15:05 2011-1-3
最近看Google JavaScript V8代码,其中有一个函数做同样的事情:
unsigned
int RoundUpToPowerOf2(unsigned int x){ ASSERT(x<=0x80000000u); x =
x - 1; x = x | (x >> 1); x = x | (x >> 2); x = x | (x
>> 4); x = x | (x >> 8); x = x | (x >> 16); return x
+ 1;}