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

时间:2011-10-10 00:00:28

标签: c++ bit-manipulation

我使用以下函数来计算整数中的设置位,它适用于正数,但不适用于负数。任何人都可以解释原因吗?

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

    return count;
}

1 个答案:

答案 0 :(得分:6)

    while (number > 0)

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

您可以强制它将号码视为无符号:

    unsigned int new_number = number;

然后它应该与new_number一起使用(这是因为符号位的实现方式有效)