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)
while (number > 0)
Run Code Online (Sandbox Code Playgroud)
将立即结束(因为从开始时的数字<0)
您可以强制它将该数字视为未签名:
unsigned int new_number = number;
Run Code Online (Sandbox Code Playgroud)
然后它应该工作new_number(这是因为符号位的实现方式)