对语言没有要求,仅仅要求给出算法
用最简洁的方法判定给定的一个数字的二进制有且仅有1个“1”

解决方案 »

  1.   

    也就是判断是否是2的幂,over
      

  2.   

    是这样吧x & (x - 1) = 0即此数与上此数小一的数为0即是二进制内有且仅有1个“1”
      

  3.   


    public   static   void   main(String[]args) 

       int retVal=0;
       int num=10;
       for(int i=0;i<31;i++){
           retVal+=(num>>>i)&1;
       }
       System.out.println(retVal);

      

  4.   


      String strBin = Integer.toBinaryString(128);
      System.out.println(strBin);
      System.out.println(strBin.indexOf(49) == strBin.lastIndexOf(49));
              //同样,零除外
      

  5.   

    public boolean have_one_1(int x){
    String a = Integer.toBinaryString(x);
    return a.matches("0*[1]0*");
    }
      

  6.   

    public boolean have_one_1(int x){
    String a = Integer.toBinaryString(x);
    return a.matches("0*[1]0*");
    }
      

  7.   


    public boolean have_one_1(int x){
    String a = Integer.toBinaryString(x);
    return a.matches("0*[1]0*");
    }
      

  8.   

    return  (i & (i - 1)) == 0;
    记得方法有好多种
    API里也有一种 return  (i & ( -i )) ==  i;
    不过当时测试过
    第一种的效率是最高的
    当时就觉得狠奇怪为什么API里的那个不是最优
    可能是出于别的什么考虑吧
      

  9.   

    本来二进制是数字问题,很多人却把数字变成字符串来处理,实在是饶了远路啊
    其实也就是一个表达式的问题,一行代码,返回true or false!
      

  10.   

    return (i & (i - 1)) == 0;
    学习
      

  11.   

    i & (i - 1) 这个 面试题中 好多类似的 就是得二进制位中1的个数开始想 用位运算, 移位后  再判断~感觉太麻烦 
      

  12.   

    bool Is2Power(int nNum)
    {
        return nNum > 0 ? ((nNum & (~nNum + 1)) == nNum ? true : false) : false;
    }
      

  13.   


    将此实现,一切ok。for(int i=0;i<=31;i++)
    {
       if (x=Math.pow(2,n))
        {System.out.print(n);}
    }