#
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;
}