バイナリ整数の1の個数


2つの解法:
1つ目:
デッドサイクルを回避するために、numと1をビット和し、最低ビットが1であるか否かを判断し、その後、1を左に移動させ、numをビットと判断し、下位ビットが1であるか否かを判断し、その後、このモードに従って1を左に32回オフに移動させる.この方法はデッドサイクルではなく,正数と負数のうち1の個数を正確に判断できるが,数字の大きさにかかわらず32回サイクル操作し,効率は高くない.
コード:
//int NumberOf1(int num)
//{
//	int FLAG = 1;
//	int count = 0;
//
//	while(FLAG)
//	{
//		if(num & FLAG)
//			count++;
//		FLAG <<= 1;
//	}
//	return count;
//}

2つ目:便利で効率的
int NumberOf1(int num)
{
	int count = 0;
	while(num)
	{
		num = num & (num - 1);
		count++;
	}
	return count;
}
int main()
{
	cout << NumberOf1(-10) << endl;

	return 0;
}