9-剑指offer: 二进制中1的个数

题目描述

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

代码

class Solution {
public:
     int  NumberOf1(int n) {
         if(n==0) return 0;
         // 每次清除一位的0
         int cnt=0;
         while(n) {
             n = n&(n-1);
             cnt++;
         }
         return cnt;
     }
};

减1的话一定会导致原数据有一位上的1变成0,直接取与操作会将该位置0.

posted @ 2019-05-27 12:59  星星,风,阳光  阅读(106)  评论(0编辑  收藏  举报