题目:
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1 输出: true 解释: 20 = 1
示例 2:
输入: 16 输出: true 解释: 24 = 16
示例 3:
输入: 218 输出: false
思路:
一种方法是一直除2,看看能不能到达1,另一种就是位运算,2的幂肯定是只有1位为1的,所以根据这个只要和n-1相与就行了,看看是否等于0,当然也可以一直向左移,和除法是一样的原理。
代码:
if( n==0){
return true;
}
if(n== 1){
return true;
}
// if(n< 0){
// n = -1 * n;
// }
// if((n & n-1) == 0){
// return true;
// }else{
// return false;
// }
while(true){
if(n % 2==0){
n /= 2;
if( n == 1){
return true;
}
}else{
return false;
}
}
位运算:
if( n==0){
return true;
}
if(n== 1){
return true;
}
if(n< 0){
n = -1 * n;
}
if((n & n-1) == 0){
return true;
}else{
return false;
}