Быстрый подсчёт количества выставленных бит - Assembler

Узнай цену своей работы

Формулировка задачи:

Привет магистры ассеблеровских диалектов! Нет ли на обычном CPU (типа i7) какой-то хитрой команды, что бы подсчитать кол-во выставленных бит в числе после операции XOR? То есть я "ксорю" два значения (допустим 64-х разрядных, хотя в идеале 128-и) и хочу посмотреть мол на сколько битов они различаются, то есть хочу подсчитать кол-во выставленных бит (то есть разных бит) в этих числах, ну то есть решение должно быть типа того: 0100 XOR 0101 как-то быстро подсчитать, что здесь 1 различающийся бит. Нет случаем какой-то секретной инструкции специально для этого, что бы считать это очень быстро? (сделать это не быстро существует тонна с горкой методов) POPCNT - оно? P.S.: а на современных GPU есть что-то? (CUDA/OpenCL)

Решение задачи: «Быстрый подсчёт количества выставленных бит»

textual
Листинг программы
int deg_of_2(uint x)
{
    return (x =! 0) ? 0 : (x & (x-1)) == 0;    
}

Объяснение кода листинга программы

Интересный факт: данная функция является достаточно универсальной и может использоваться для определения степени двойки любого числа, а не только для числа 2. Вот список элементов функции:

  1. Входной параметр: x — число, для которого необходимо определить степень двойки.
  2. Условие: (x =! 0) — проверка на то, что число x не равно нулю.
  3. Значение переменной: 0 — результат работы функции в случае, если число x равно нулю.
  4. Значение переменной: (x & (x-1)) — результат вычисления по модулю 2, который является двоичным представлением числа x.
  5. Условие: (x & (x-1)) == 0 — проверка на то, что результат вычисления по модулю 2 равен нулю.
  6. Результат работы функции: (x =! 0) ? 0 : (x & (x-1)) == 0 — результат выполнения функции в зависимости от значений переменных x и 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы