这题算是一个水题,我却用了很久也做不出来,因为自己对位运算非常不了解。
在网上找到一个比较满意的代码 转载自 此处
#include <iostream>
using namespace std;
const int MAX_BIT=32;
int CountOne(int input)
{
int cnt=0;
for (int i=0; i<MAX_BIT; i++)
{
if (input>>i&1)//右移i位,比较与1的大小,如果相等则++;
{
cnt++;
}
}
return cnt;
}
int main()
{
int input;
while (cin>>input)
{
if(input==0)
break;
for (int ii=input+1;; ii++)
{
if(CountOne(ii)==CountOne(input))
{
cout<<ii<<endl;
break;
}
}
}
return 1;
}
>>的运算级比较高
即 input>>i&1 先右移 i 位 ,再与1 比较大小,以此可以计数二进制中1 的个数。
本文介绍了一个使用位运算计数二进制中1的数量的算法,并通过一个具体的C++实现示例来说明其工作原理。文章还解释了右移运算符(>>)和按位与运算符(&)的优先级及其如何帮助确定二进制表示中1的个数。
266

被折叠的 条评论
为什么被折叠?



