一个无符号的整数,如何判断它是2的幂如(1,2,4,8,16),帮写个算法

解决方案 »

  1.   

    /*
      返回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;
       }
    }
      

  2.   


    boolean isPowerOfTwo(int i){
     
        return ((i&(i-1))==0);
    }
      

  3.   


    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));
    }
    }
      

  4.   

    位运算速度最快 弄个List保存一定范围也可以
    或者就搞成递归一路除2 也不算糟糕
      

  5.   

    "&"这个是什么运算符,能跟我说下不?初学者如是说
      

  6.   


    public static boolean isPowerOfTwo(int num)
    {
    for(int i = 1; i <= num ; i *= 2)
    {
    if(i == num)
    {
    return true;
    }
    }

    return false;

    }
      

  7.   

    &按位与运算  顶3楼...
      

  8.   

    这里再给几个娱乐的方法return  (num & -num) == num ;
    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");
      

  9.   


    有个小Bug, 0&-1==0,但是0不是2的幂
      

  10.   

    我也添一个 

    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;
    }
      

  11.   

    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;
    } public static boolean isPowerOfTwo(int num) {
    for (int i = 1; i <= num; i *= 2) {
    if (i == num) {
    return true;
    }
    } return false; }
      

  12.   


    System.out.println(new BigInteger("16").bitCount()==1);简洁版!可以处理大整数
      

  13.   

    正解,m是2的幂,必定2%m==0,而如果被除数是2的幂,那么2%m=2&(m-1)。
      

  14.   

    判断 num%2==0 右移一位 num>>1 递归