バイナリ整数の1の個数
2つの解法:
1つ目:
デッドサイクルを回避するために、numと1をビット和し、最低ビットが1であるか否かを判断し、その後、1を左に移動させ、numをビットと判断し、下位ビットが1であるか否かを判断し、その後、このモードに従って1を左に32回オフに移動させる.この方法はデッドサイクルではなく,正数と負数のうち1の個数を正確に判断できるが,数字の大きさにかかわらず32回サイクル操作し,効率は高くない.
コード:
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;
}