如何判断一个数是否为2的n次方
/*
* 思路一:一直做移位运算
* 思路二:使用n&(n-1),判断结果是否为0,为0则是
*
*/
//思路1
public static boolean isPower1(int n) {
if(n>0) {
int m=1;
while(m<=n) {
m<<=1;
if(m==n)
return true;
}
}
return false;
}
//思路2
public static boolean isPower2(int n) {
if(n>0) {
if((n&(n-1))==0)
return true;
}
return false;
}
求一个数中的二进制有多少个1
//思路1:每次去比较最后一位是否为1
public static int countOne1(int n) {
int count=0;
while(n>1) {
n>>=1;
if((n&1)==1)
count++;
}
return count;
}
//思路二:由于n&(n-1)每一次都会少最后一位,
public static int countOne2(int n) {
int count=0;
while(n>0) {
if(n!=0) {
n=n&(n-1);
count++;
}
}
return count;
}