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

相关文章:

  • 2022-02-07
  • 2022-12-23
  • 2022-12-23
  • 2021-12-08
  • 2021-06-28
  • 2022-01-07
  • 2022-12-23
  • 2021-07-27
猜你喜欢
  • 2022-01-16
  • 2021-08-04
  • 2022-02-24
  • 2021-07-16
  • 2021-10-28
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案