public boolean check(int m)
{
if(n < 1) return false;
int n = m & m(m-1);
return n == 0;
}
定义2的n次方的数字m,我们知道m二进制为0001,0010,0100……这样的,而m-1的二进制为0000,0001,0011……这样的。可见m&(m-1)的运算结果为0,所以有如上代码。
public boolean check(int m)
{
if(n < 1) return false;
int n = m & m(m-1);
return n == 0;
}
定义2的n次方的数字m,我们知道m二进制为0001,0010,0100……这样的,而m-1的二进制为0000,0001,0011……这样的。可见m&(m-1)的运算结果为0,所以有如上代码。