关于Hamming Weight

来源:互联网 发布:淘宝上卖的假索尼电视 编辑:程序博客网 时间:2024/06/05 11:59

#

Hamming Weight即对于无符号整形变量,它的二进制表示中1的个数。这里介绍三种方法:

  • 求余操作
  • 使用位操作
  • 位操作拓展

求余操作

这是最简单最易想到的方法,即每次除2,若余数为1,则表示存在一个1。

代码

int hammingWeight1(unit32_t n){        int num=0;        while (n)        {            if( n % 2==1)                count++;            n = n / 2;        }        return num;    }

使用位操作

对于二进制来说,右移操作同样可以达到相除的目的。与1求&操作可以判断最后一位是否为1.

代码

int hammingWeight2(unit32_t n)    {        int num = 0;        while (n)        {            num += n & 1;            n >>= 1;        }        return num;    }

位操作拓展

上面的方法,对于二进制的每一位都进行了判断。为了进一步提高效率,可以让n与n-1进行&操作,结果可以消去高位上的1。

int hammingWeight2(unit32_t n)    {        int num = 0;        while (n)        {            n = n&(n - 1);            num++;        }        return num;    }
0 0
原创粉丝点击