码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer—二进制中1的个数

时间:2015-04-24 12:33:52      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:剑指offer   二进制中1的个数   

题目:

实现一个函数,输入一个整数,输出该数二进制表示中1的个数。如9的二进制是1001,因此输入9输出2。


解法一:可能死循环

int num1(int n)
{
     int count =0;
     while(n)
     {
         if(n&1) count++;
         n=n>>1;
      }
      return count;
}

上面的函数如果输入一个负数,如果一直做右一运算,最终这个数字就会变成0xFFFFFFFF而陷入死循环。


解法二:无死循环但效率低

int num1(int n)
{
     int count =0;
     unsigned int flag=1;
     while(flag)
     {
         if(n&flag) count++;
         flag=flag<<1;
      }
      return count;
}

循环次数等于整数二进制的位数,32位的整数需要循环32次。


解法三:有几个1只需要循环几次

int num1(int n)
{
     int count =0;
     while(n)
     {
         ++count;
         n=(n-1)&n;
      }
      return count;
}


剑指offer—二进制中1的个数

标签:剑指offer   二进制中1的个数   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/45244405

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!