海涛的思路相当犀利
比如 1100 包含1的个数
先减-1 的1011 没改变高位的1 只改变地位 ,1100&1011 ---》1000刚好去除了最右边低位的1.
那么简单方面可以直接写出来
int data(int n)
{
int num=0;
while(n)
{
num++;
n = (n-1)&n;
}
return num;
}
这种题目的变种
两个整数m和n,求改变m二进制中多少位才能得到n
这种问题分两步走
1 两个求异或,目的就是求出m和n相比不同的1的个数
然后计算机异或后中含有的1的个数。