В дополнение к тому, что уже было сказано, я хотел бы обратить ваше внимание на то, что многие компиляторы предлагают встроенную функцию popcnt, которая может быть быстрее, чем делать это вручную (опять же, может быть, нет, не забудьте протестировать ее).).У них есть преимущество, вероятно, компиляции в один код операции popcnt, если он доступен в вашей целевой архитектуре (но я слышал, что они делают глупые медленные вещи, когда возвращаются к функции библиотеки), тогда как вам очень повезет, если компилятор обнаружит один изалгоритмы из коллекции битов Шона (но это возможно).
Для msvc это __ popcnt (и варианты), для gcc это __builtin_popcount (и варианты), для OpenCL (хорошо, что вы не сделали)не спрашивайте об этом, но почему бы не добавить его) это popcnt, но вы должны включить cl_amd_popcnt.