public static int nextPowerOf2(int n) {
n -= 1;
n |= n >>> 16;
n |= n >>> 8;
n |= n >>> 4;
n |= n >>> 2;
n |= n >>> 1;
return n + 1;
}
以65舉例子,
1
2
3
4
5
|
n-= 1 ; // n=1000000(二進制)
... //16、8無變化
n|=n>>> 4 ; //n=n|(n>>>4)=1000000|0000100=1000100
n|=n>>> 2 ; //n=n|(n>>>2)=1000100|0010001=1010101
...
|
-
看出規律來了吧,右移多少位,就把最高位右邊的第x位設置為1;
-
第二次,就把兩個為1的右邊xx位再設置為1;
-
第n次,就把上一步出現的1右邊xxxx位置為1;//xxx隨便寫寫,意會
這樣執行完,原來是1000000,變成了1111111,最后加1,就變成2的整數次方數了。