方法:因為是將n轉(zhuǎn)化為2的n次冪,需要從二進制角度來看待問題眠饮。
例如:5 = 0101奥帘, 9 = 1001,
對于5來說要找到的是8 = 1000, 9來說要找到的是16 10000
8 = 7+1 = 0111 +1仪召;
16 = 15+1 = 01111+1;
這個想法是將最高有效位右邊的所有位都設(shè)置為1,最后+1便是最接近的2的n次冪;
//? 0|1=1寨蹋,1|1=1,0|0 =0;?
// decrement n (to handle cases when n itself is a power of 2)
n--;
// Set all bits after the last set bit
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
// increment n and return
return ++n;
文章純屬自我學(xué)習(xí)扔茅!