import java.io.*; public class Test{ public static boolean isMi(int num){ return 0==(num&(num-1)); } public static void main(String args[]){ for(int i=1;i<50;i++) System.out.println("The result "+i+":"+isMi(i)); } }
位运算速度最快 弄个List保存一定范围也可以 或者就搞成递归一路除2 也不算糟糕
"&"这个是什么运算符,能跟我说下不?初学者如是说
public static boolean isPowerOfTwo(int num) { for(int i = 1; i <= num ; i *= 2) { if(i == num) { return true; } }
返回true表示target是2的N次方,返回false表示不是
public boolean is2N(int target){
if(target==1){
return true;
}else if(target&(target-1)==0){
return true;
}else{
return false;
}
}
boolean isPowerOfTwo(int i){
return ((i&(i-1))==0);
}
import java.io.*;
public class Test{
public static boolean isMi(int num){
return 0==(num&(num-1));
} public static void main(String args[]){
for(int i=1;i<50;i++)
System.out.println("The result "+i+":"+isMi(i));
}
}
或者就搞成递归一路除2 也不算糟糕
public static boolean isPowerOfTwo(int num)
{
for(int i = 1; i <= num ; i *= 2)
{
if(i == num)
{
return true;
}
}
return false;
}
return (m & (m-1)) == 0;
return (num | (num-1)) == (2*num-1); //可能溢出
return Integer.toBinaryString(num).replaceAll("0", "").length() == 1;
return Integer.toBinaryString(num).indexOf("1") == Integer
.toBinaryString(num).lastIndexOf("1");
有个小Bug, 0&-1==0,但是0不是2的幂
public static boolean tt(int num) {
if (num < 0)
return false;
return 0 == (num & (num - 1)); } public static boolean isp2(int num) {
if (num < 0)
return false;
if (num == 1)
return true;
boolean a = (num % 2 == 0);
while (a && num > 2) {
num = num / 2;
a = (num % 2 == 0);
}
return a;
}
if (num<=0)
return false;
return 0 == (num & (num - 1)); } public static boolean isp2(int num) {
if (num <= 0)
return false;
if (num == 1)
return true;
boolean a = (num % 2 == 0);
while (a && num > 2) {
num = num / 2;
a = (num % 2 == 0);
}
return a;
} public static boolean isPowerOfTwo(int num) {
for (int i = 1; i <= num; i *= 2) {
if (i == num) {
return true;
}
} return false; }
System.out.println(new BigInteger("16").bitCount()==1);简洁版!可以处理大整数