//判断一个数的二进制形式有几个1
#include <iostream>
using namespace std;
int bxy(int i)
{
int count = 0;
while(i != 0)
{
if(i%2 == 1)
{
count++;
}
//右移一位
i = i/2;
}
return count;
}
void main()
{
//1100101
int i = 101;
cout << bxy(i)<<endl;
}
下面改用位运算,效率更高!
#include <iostream>
using namespace std;
int bxy(int i)
{
int count = 0;
while(i != 0)
{
if(i & 1 == 1)
{
count++;
}
//右移一位
i = i >> 1;
}
return count;
}
void main()
{
//1100101
int i = 101;
cout << bxy(i)<<endl;
}
当i<0上面的方法就完蛋了,死循环了
#include <iostream>
using namespace std;
int bxy(int i)
{
int count = 0;
//无符号数,遍历:1->2->4->...->2^32->0
unsigned int flag = 1;
while(flag)
{
if(i&flag)
{
count++;
}
flag = flag << 1;
}
return count;
}
void main()
{
//32
int i=-1;
cout << bxy(i) <<endl;
}
#include <iostream>
using namespace std;
int bxy(int i)
{
int count=0;
while(i)
{
++count;
i = (i-1)&i;
}
return count;
}
void main()
{
cout << bxy(-1)<<endl;
}