二进制计数1,介于0和NULL之间

Count 1 in Binary,difference between 0 and NULL

本文关键字:NULL 之间 介于 二进制      更新时间:2023-10-16

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

首先我有代码

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

但它没有通过信息

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

当我把代码改成这个

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

它被接受。那么,问题出在哪里呢?有人能帮我吗?

正如其他人所建议的,无符号与有符号可能会让你在这里感到困惑。

我这样做了,使用了一个模板参数,这样你就可以使用不同类型的数字:

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