方法一:最最容易想到的方法,先加上二进制最后一位,通过&1可以得到,然后原数除以二
int getCount(int number)
{
int ans = 0;
while(number)
{
ans += num&1;
num >>=1;
}
return ans;
}
方法二:如何消除最后一个1呢,这里我们想到,如何判断一个数是不是2的整数次幂呢,分析一下规律,如果一个数是2的整数次幂,那么他的二进制表示只有一个1,然后我们令这个数减去1,则原来的1变为0,后面为0 的数全部变为1,然后对两个结果进行与运算,结果为0,这样原数就为2的整数次幂。把这个原理应用到这里,答案就出来了
int getCount(int number)
{
int ans = 0;
while(number)
{
number = number&(number-1);
ans++;
}
return ans;
}
课后习题2:
给定两个正整数(二进制形式表示)A和B,问把A变成B需要改变多少位,也就是说,A和B的二进制表示中多少位是不同的,这里可以先对A和B进行异或位运算,则不同的位被置为1,然后对异或的结果求二进制表示中1的个数即可。