计算一个字节里面有多少bit被置1 ,三种算法

来源:互联网 发布:淘宝巨型猪笼草 编辑:程序博客网 时间:2024/04/24 13:29

其中一二的方法,参考了网上的  关于“计算一个字节里(byte)里面有多少bit被置1”的思考 这篇文章

第一种,移数据

int fun1(int data)
{
    int count=0;        //计数
    while(data)
    {
       count+=data&1;   //检查Num最后一位是否为1
       data>>=1;        

    }
    return count;


 

没什么可解释的,但如果是个负数,可能会出问题

 

第二种,移1

int fun2(int data)

{

       int count=0;

       int bit_1=1;

       while(bit_1)

       {

            if(data&bit_1)count++;

            bit_1<<=1;

       }

       return count;

}


虽然不会出现什么问题,但是效率没有第一种高

 

第三种,与上自己减一的数

int fun3(int data)

{

         int count=0;

         while(x)

         {

                 count++;

                 x = x & (x - 1);

         }

       return count;

}

1000 - 1 = 0111,正好是原数取反;

所以用这种方法来求1的个数是很效率很高的,不懂的敲一敲代码,就能明白了

 

int main()

{

          printf("fun1 = %d\n",fun1(9999));                   //循环会执行14次

          printf("fun2 = %d\n",fun2(9999));                   //循环会执行32次

          printf("fun3 = %d\n",fun3(9999));                   //循环会执行8次

          return 0;

}


一下就能看出那个效率高了,第一种还有可能会死在负数,第二种效率低,第三种效率高



原创粉丝点击