剑指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;
     }

猜你喜欢

转载自blog.csdn.net/zy20150613/article/details/89927937