更大的最小功率我碰到一段代碼來尋找的2最小功率比32位的整數n ...發現的2大於n
n+=(n==0);
n--;
n|=n>>1;
n|=n>>2;
n|=n>>4;
n|=n>>8;
n|=n>>16;
n++;
現在它是如何工作的更大?我試圖在印刷基地-2數N = 100的每一步之後,但它並沒有多大意義。它背後的邏輯是什麼?
更大的最小功率我碰到一段代碼來尋找的2最小功率比32位的整數n ...發現的2大於n
n+=(n==0);
n--;
n|=n>>1;
n|=n>>2;
n|=n>>4;
n|=n>>8;
n|=n>>16;
n++;
現在它是如何工作的更大?我試圖在印刷基地-2數N = 100的每一步之後,但它並沒有多大意義。它背後的邏輯是什麼?
這段代碼用二進制1
s填充給定數字n
的所有最低有效位,然後將結果增加1
,實現要求的結果。例如,用於輸入101
的位操作將產生111
和增加通過1
後它將成爲1000
(8),這是確實的2最少的功率大於101
(5)。
更新:實際上,這是對手動設置每個lsb位的簡單方法的優化。爲什麼這種優化達到相同的結果是在更廣泛的範圍內的另一個問題,超出了這個問題。
附加冰層的回答是:作爲解釋here,算法計算1 << (floor(log_2(n - 1)) + 1)
。
實際上它發現的2大於或小於等於n
最小功率和它的工作原理爲32位的無符號數。
我認爲這是一個32位整數? – WhozCraig
它只適用於32位uint。順便說一句有[同樣的問題](http://stackoverflow.com/questions/671815/what-is-the-fastest-most-efficient-way-to-find-the-highest-set-bit-msb-in-一個-I):nextpow2是相同數量的,如果它是兩者的功率('X&(X - 1)== 0')及其'MSB << 1'否則。 –
@WhozCraig是的。對不起,我編輯了這個問題。 – sudeepdino008