Почему эта функция не работает для отрицательных чисел? - PullRequest
0 голосов
/ 10 октября 2011

Я использую следующую функцию для вычисления установленных битов в целых числах, и она работает для положительных чисел, но не для отрицательных чисел.Кто-нибудь может объяснить, почему?

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

    return count;
}

1 Ответ

6 голосов
/ 10 октября 2011
    while (number > 0)

Немедленно закончится (так как число <0 с самого начала) </p>

Вы можете заставить его считать число без знака:

    unsigned int new_number = number;

И тогда оно должно работать сnew_number (это работает из-за того, как реализован знаковый бит)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...