昨天同事问我有啥好算法来计算“最接近且大于等于某个正整数的
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;}