求某数二进制形式中1的个数

程序:

  long fun_c(unsigned long long x)

  {

    int val = 0;

    for(int i=0;i<8;i++)        //并行的计算x中8个单字节的和

    {

      val += x^0x0101010101010101L;

      x >>=1;

    }

    val += (val>>32);        //对val的两半求和

    val += (val>>16);        //对val的两个低16位求和

    val += (val>>8);          //对val的两个低字节求和

    return val^0xFF;         //最终的1的个数保存在低字节中,屏蔽高位

  }

posted @ 2012-12-27 17:02  毛毛hhmm  阅读(193)  评论(0编辑  收藏  举报