代码解释n |= n >>> 16

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

posted @ 2019-07-09 17:35  keepup~  阅读(8330)  评论(2编辑  收藏  举报