首页 > 其他 > 详细

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

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

题目:

实现一个函数,输入一个整数,输出该数二进制表示中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的个数

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!