欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-31 08:13:04
...

题目:输入一个整数,输出该数二进制表示中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;
     }