二进制中的计数1,0和NULL之间的差异

时间:2016-01-10 21:51:53

标签: c++ bit-manipulation

问题是计算32位整数的二进制表示中有多少1。我用C ++写的。

首先我有代码

[[1, 3, 7], [2, 4, null], [null, 5, null], [null, 6, null]]
[[1, 3, 7], [2, 4], [null, 5], [null, 6]]

但它没有传递信息

输入-1(11111111111111111111111111111111)输出0预期32

当我将代码更改为此

int countOnes(int num) {
    int count=0;
    while(num>0){
        count++;
        num=num&num-1;
    }
    return count;
} 

它被接受了。 那么,问题是什么?有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

正如其他人所说,unsigned vs. signed可能会让你绊倒。

我这样做,使用模板参数,因此您可以使用不同类型的数字:

template<typename Num>
unsigned int count_binary_1(const Num& number)
{
    unsigned int result = 0;
    unsigned int count = sizeof(number) * 8;
    for (unsigned int i = 0; i < count; ++i)
    {
        if ((number >> i) & 1)
        {
            ++result;
        }
    }
    return result;
}