负数补码不能用辗转相除。按位减一相与,一次可以消掉右侧的一个1

class Solution {
public:
     int  NumberOf1(int n) {
         int ans=0;
         while(n!=0){
             ans++;
             n=n&(n-1);
         }
         return ans;
     }
};