剑指offer:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

分析:只要n不为0就将计数器加1,然后利用公式n=n&(n-1)会每次从最后消掉一个1,消完了n就为0了,不再计数,这可以减少循环次数,否则一个整数要进行32次循环。

  int  NumberOf1(int n) {
         int count = 0;
         int na = 32;
         while(na--)
         {
             if(n&1 == 1)
             {
                 count++;
             }
             n = n>>1;
         }
         return count;
     }

 

全部评论

相关推荐

11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务