@Rapen

Как работает такое решение с побитовыми операторами?

Как работает такое решение задачи, в котором использованы побитовые операторы, задача, функция принимает число, которая должна возвращать кол-во ее битов равное единице, пример 1234 - аля в двоичном 10011010010 и высчитывает кол-во единиц:
countBits(1234)  //5 

//решение 
function countBits(n) {
  for(c=0;n;n>>=1)c+=n&1
  return c;
}

В операторах почти не смог разобрася, к примеру 14&9 = 8, вроде элеменарный пример, а каким вот образом мы получили 8 вообще донт кнов).
  • Вопрос задан
  • 179 просмотров
Решения вопроса 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
>> - оператор бинарного сдвига вправо, то есть число 13 в бинарном виде 1101, при сдвиге вправо на один бит будет число 6 (110)
& - бинарное И, каждый бит числа слева сопоставляется с соответствующим битом числа справа, например 13 & 6 (1101 & 0110) будет 4 (0100)

Теперь разберем конкретный пример, начальные условия
n = 1234 (10011010010)
c = 0
Условие цикла for - значение переменной n, так как переменная числовая, цикл будет выполнятся пока n не станет равной 0
Первая итерация:
n & 1 - 0 (так как 1 - это 00000000001), все биты при & дают 0
с += 0 - c будет 0
n >>= 1 - n будет 617 (1001101001)
Вторая итерация:
n & 1 - 617 & 1 - 1
c += 1 - c будет 1
n >>= 1 - n будет 308 (100110100)
Ну и так далее, пока на последней итерации, перед которой в n останется 1 и операция n >>= 1 сделает его 0, что и послужит завершением цикла, а в c на тот момент будет количество еденичных битов начального числа
Ответ написан
abyrkov
@abyrkov
JavaScripter
Давайте разберемся, что такое бит вы знаете? Надеюсь да. Так вот, все в компе состоит из этих байтиков и т.д.
В данном случае так выходит:
14 1110
&9 1001
=8 1000
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы