对于一个数字,无符号,求其二进制表示中的1个数,要求算法执行效率尽可能高。
解法一:考虑利用整数除法的特点,通过相除和求余来分析。
void fun1(int num)
{
int ct=0;
while (num)
{
if (num%2==1)
{
ct++;
}
num/=2;
}
cout<<ct<<endl;
}
解法二、使用位操作 假设该数是一个无符号整型八位字节表示的数字,通过该数与0x01相与,得出最后一位数字是0或者是1,若是零,与后结果为0,若是1,与后结果为1.
int ct=0;
while (num)
{
ct+=num&0x01;
num>>=1;
}
cout<<ct<<endl;
解法三、任意一个数字x,当他与x-1相与之后,x的结果相比原来就少了一个1