我使用以下函数来计算整数中的设置位,它适用于正数,但不适用于负数。任何人都可以解释原因吗?
int CountSetBits(int number)
{
int count = 0;
while (number > 0)
{
count += (number & 0x01);
number >>= 1;
}
return count;
}
答案 0 :(得分:6)
while (number > 0)
将立即结束(因为数字从开始时起<0)
您可以强制它将号码视为无符号:
unsigned int new_number = number;
然后它应该与new_number
一起使用(这是因为符号位的实现方式有效)