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的整数次方数了。