判断一个正整数是否是2的整数次幂???
实现一个方法,来判断一个正整数是否是2的整数次幂(如16是2的4次方,返回 true;18不是2的整数次幂,则返回false)。
法一:暴力法
思路:
1.变量temp从1一直以2次幂增加,当增加到temp = target就返回true;
2.如果temp > target直接返回false;
public boolean funV1(int a) {
int temp=1; //迭代变量,从1开始
while(temp <= a){
if(temp == a) { //当temp等于目标值就返回true
return true;
}
temp *= 2; //2次幂增长
}
return false; //没找到返回false
}
法二:位运算
当返回的结果为0返回true,否则返回false
//a & (a - 1)
//a = 1----> 1 & (1 - 1)= 1 & 0 = 0 ---->true
//a = 2----> 2 & (2 - 1)= 10 & 01 = 0 ---->true
//a = 3----> 3 & (3 - 1)= 11 & 10 = 10 ---->false
//a = 4----> 4 & (4 - 1)= 100 & 011 = 0----->true
public boolean funV2(int a) {
return (a & (a-1) ) == 0; //很简单
}