昨天同事問我有啥好算法來計算「最接近且大於等於某個正整數的
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;}