异或 不同为1,相同为0
按位与 两个进制位同为1为1,其他为0
如1100&1011=1000.也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。
class Solution {
public int NumberOf1(int n)
{
int num= 0;
while(n!=0) {
n =n&(n-1);
num++;
}
return num;
}
}