Я написал функцию 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