#include<iostream>
using namespace std;

int getNumber1(int n)
{
	int r = 2, sum = 0;
	while(n)//范式:整数n对应的r进制中的各位数字为下面的n % r (逆序)
	{
		if(1 == n % r)
			sum++;
		n /= r;
	}
	return  sum;
}

int getNumber2(int n)
{
	int sum = 0;
	while(n)
	{
		if(1 == (n & 1)) //"=="的优先级比"&"高
			sum++;
		n  >>= 1;
	}
	return  sum;
}

int getNumber3(int n)
{
	if(0 == n)
		return 0;
	//n的二进制中1的个数比n & (n - 1)的二进制中1的个数多1个
	return  getNumber3(n & (n - 1)) + 1;
}

int getNumber4(int n) 
{
	int sum = 0;
	while(n)
	{
		sum++;
		n = n & (n - 1);
	}
	return  sum;
}

int main()
{
   cout << getNumber1(65) << endl;
   cout << getNumber2(65) << endl;
   cout << getNumber3(65) << endl;
   cout << getNumber4(65) << endl;
   return 0;
}


本文转载:CSDN博客