Я видел многочисленные вопросы о включении числа битов набора insert type of
вход, но почему это полезно?
Для тех, которые ищут алгоритмы о разрядном подсчете, посмотрите здесь:
Вы можете рассматривать строку битов как набор
с 1, представляющий принадлежность к набору для соответствующего элемента. Таким образом, счетчик бит дает вам счетчик совокупности
набора.
Практические приложения включают сжатие, криптографию и коды с исправлением ошибок. См., Например, wikipedia.org/wiki/Hamming_weight и wikipedia.org/wiki/Hamming_distance .
Если вы используете собственную схему контроля четности, вы можете захотеть подсчитать количество битов. (В общем, конечно, я бы предпочел использовать чужой.) Если вы эмулируете старый компьютер и хотите отслеживать, насколько быстро он будет работать на оригинале, у некоторых есть инструкции умножения, скорость которых зависит от числа 1 бит.
Я не могу вспомнить, когда бы я хотел этим заниматься за последние десять лет или около того, поэтому подозреваю, что это скорее упражнение по программированию, чем практическая необходимость.
По иронии судьбы, он полезен для вопросов на собеседовании, потому что требует детального низкоуровневого мышления и, похоже, не преподается как стандартный алгоритм в компьютерных курсах науки.
Некоторым людям нравится использовать растровые изображения для обозначения наличия / отсутствия «материала».
Существует простой прием, позволяющий выделить младший 1 бит в слове, преобразовать его в поле единиц в битах под ним, а затем вы можете найти номер бита, посчитав единичные биты.
countbits((x XOR (x-1)))-1;
Посмотрите, как это работает.
Let x = 00101100
Then x-1 = 00101011
x XOR x-1 = 00000111
В котором установлено 3 бита, поэтому бит 2 был наименее значимым 1-битом в исходном слове