如何机智的判断一个整数是否是2的n次方幂

时间:2023-01-06 05:18:51

编程之美-微软技术面试心得这本书中详细的讲了几种方法,有兴趣可以去看看。

我现在只写两种比较容易理解的方法。

第一种

2   10

4   100

8   1000

。。。。。

发现规律没有,2的n次方变成二进制后首位为1,其余位都为0。

所以嘞,我们讨巧的可以这么做,假设输入的为int型:

boolean powerof2(int n)
{
      return ((n&(n-1))==0)
}

第二种,就是先将这个数对2取模为0,再对2整除,再对2取模,一直到这个数最后为2,如果不能这样做就不是2的n次方幂。这个方法如果不能理解可以拿56这个数,去按照流程自己算一遍。就可以理解这其中的奥妙了。

int count = 1;
while(i)
{
    if(2 == i)        //注意这里 判断最后为2才是关键所在
    {
        System.out.println("YES");  
        break;
    }
    if(0 == i%2)
    {
       i = i/2;
       count ++;
     }
     else
     {
        System.out.print("no");
        break;
      }
}


方法有很多,大家可以去发散思维想。