Task 47. Разница в количестве битов

Task 47. Разница в количестве битов

UniLecs

Задача: написать функцию, ктр определит кол-во битов, ктр нужно изменить, чтобы из целого числа А получить целое число B.

Например, A = 71 (или 1000111), B = 15 ( или 0001111)

1000111

0001111

Нужно изменить 2 бита в А, чтобы получить число B.

Идея: вспоминаем операцию XOR, каждая единица результата XOR соот-т биту, ктр не совпадает в числах А и B. Поэтому, чтобы получить кол-во несовпадающих битов в числах, нужно посчитать число единиц в A XOR B.

реализация на C#

Есть еще одно улучшение для этой задачи: можно заменить постоянный сдвиг XOR для проверки бита на инвертирование младшего разряда.

Следующая операция XOR = XOR & (XOR - 1) сбрасывает младший ненулевой бит числа XOR.

реализация на C#

https://gist.github.com/unilecs/76f5109b0a6b27d9b273a18e74d76d41


Тест:

https://dotnetfiddle.net/6I6hUZ

Report Page