Power of Two
Given an integer, write a function to determine if it is a power of two.
写一个程序判断给定的整数n是否是2的幂,比如1,2,4,8分别都是2的幂,但6就不是。
转换成二进制来看,如果这个数只有一个1则它一定是2的幂。比如2是10,4是100,8是1000而6是110
普通解法:循环判断是给定数字转换成二进制后是否只有一个1
public boolean isPowOfTwo(int n) {
if (n < 0) {
return false;
}
boolean once = false;
while (n > 0) {
if ((n & 1) == 1) {
if (once) {
return false;
} else {
once = true;
}
}
n = n >> 1;
}
return once;
}
进阶解法:位操作中 n & (n-1)
可以消除最低位上的1,只需判断如下
public boolean isPowOfTwo(int n) {
if (n <= 0) {
return false;
}
return (n & (n - 1)) == 0;
}