昨天看到淘米网络的一道编程题,给定一个数判断这个数是不是2的幂。
我自己想到的使用递归的方法进行实现,代码如下。
class squ2
{
public static void main(String[] args)
{
int m=32;
if (is2(m))
{
System.out.println(m+"是2的幂");
};
}
public static boolean is2(int a)
{
if (a==1)
{
return true;
}
if (a%2==1)
{
return false;
}
return is2(a=a/2);
}
}
不过我一个同学用了一个更加简便的方法:
用这个数和比他小的下一个整数相与,如果结果为0则该数是2的幂,否则不是,如8和7相与为0。
代码如下:
public static boolean is2_1(int b)
{
int w=b&(b-1);
if (w==0)
{
return true;
}
return false;
}
看起来简便多了,但是还是不知道为什么这样就可以。