为什么这个功能对负数不起作用?

rda*_*sxy 0 c++ bit-manipulation

我使用以下函数来计算整数中的设置位,它适用于正数,但不适用于负数.有谁能解释为什么?

int CountSetBits(int number)
{
    int count = 0;
    while (number > 0)
    {
        count += (number & 0x01);
        number >>= 1;
    }

    return count;
}
Run Code Online (Sandbox Code Playgroud)

Foo*_*Bah 6

    while (number > 0)
Run Code Online (Sandbox Code Playgroud)

将立即结束(因为从开始时的数字<0)

您可以强制它将该数字视为未签名:

    unsigned int new_number = number;
Run Code Online (Sandbox Code Playgroud)

然后它应该工作new_number(这是因为符号位的实现方式)