Как эффективно подсчитать конечные нулевые биты в числе?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как эффективно подсчитать конечные нулевые биты в числе?

Сообщение Anonymous »

Я написал функцию Trailing_zeroes(int n), которая возвращает количество конечных нулей в двоичном представлении числа.
Пример< /em>: 4 в двоичном формате равно 100, поэтому функция в этом случае возвращает 2.
unsigned trailing_zeroes(int n) {
unsigned bits;

bits = 0;
while (n >= 0 && !(n & 01)) {
++bits;
if (n != 0)
n >>= 1;
else
break;
}
return bits;
}

Причина использования оператора if заключается в том, что в случае, если n равно 0, возникнет цикл.
Я думаю, что такой код написан довольно некрасиво; есть ли лучший способ?
Я хочу избежать оператора Break внутри while, потому что многие люди говорили мне, что использование этого оператора внутри while/ for иногда может быть «неформальным». Я думал переписать функцию вот так, но не думаю, что это лучший способ:
unsigned bits;
if (n == 0)
return bits = 1;

bits = 0;
while (!(n & 01)) {
++bits;
n >>= 1;
}


Подробнее здесь: https://stackoverflow.com/questions/452 ... n-a-number
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»