Когда требуется подсчитать количество не нулевых бит в числе, то следуют алгоритму: проверяют четность числа и смещают на каждой итерации на один разряд вправо, пока число не обратится в ноль. Есть и другой алгоритм, который обходится без цикла.
Вот пример первого алгоритма (работает в JS для чисел до Number.MAX_SAFE_INTEGER, т.е. 53 битного числа):
|
|
function bitCount (n) { let count = 0; while (n > 0) { if (n % 2 == 1) { count ++; n -- } n /= 2; } return count; } |
А это второй пример, работает для 32х разрядных чисел.
|
|
function bitCount (n) { n = n - ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) return ((n + (n >> 4) & 0xF0F0F0F) * 0x1010101) >> 24 } |
Данная запись опубликована в 09.05.2023 02:39 и размещена в рубрике javaScript.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Март 20, 2025 г.
Делюсь примером кода, для создания обертки в модели экосистемы CKEditor 5.
Здесь есть несколько нюансов.
Во-первых, нужно проверить, являются ли оборачиваемые элементы валидными по отношению к обертке, в которую мы их помещаем. У CKE элементов ...
Читать
Август 5, 2018 г.
Иногда я возвращаюсь к практикам без использования jQuery, работая с DOM на чистом js. В таком контексте его называют vanila js.
Давайте рассмотрим пример создания DIV контейнера, определения его свойств, пользуясь только javascript без библиотек-оберток. ...
Читать
Октябрь 26, 2015 г.
Одна из типичных задач для улучшения пользовательского интерфейса на сайтах - это визуализация ожидания загрузки/обновления страницы. Наиболее частый случай ...
Читать
Май 12, 2023 г.
Рассмотрим три операции - установка нужного бита в числе, сброс бита и инверсия.
У нас есть число N и номер бита i. Номер бита нумерует биты, начиная с нуля.
Прежде всего нам понадобится маска, с помощью которой мы произведем нужную нам операцию. ...
Читать