题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。二进制中1的个数
思路
这题还是要分析,规律比较难找,没有普适性,仅仅针对这一题。
任意一个二进制 如 111,让该数-1成为110,111和110相与得到110,会发现他让最右边的一位变成0.接着110-1成为101.101与110相与得到100,100-1成为011和100相与得到000结束。
可以看到规律,任意二进制-1之后的结果与二进制本身相与,会把该数的最右边的1变成0,有多少个1就做多少次与操作。
public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0)
{
count++;
n=n&(n-1);
}
return count;
}
}