libjmmcg
release_579_6_g8cffd
A C++ library containing an eclectic mix of useful, advanced components.
|
Count the number of set bits in the input number. More...
#include <count_setbits.hpp>
Public Types | |
typedef unsigned long long | element_type |
Static Public Member Functions | |
constexpr static element_type | result (element_type num) noexcept(true) |
constexpr static float | efficiency () noexcept(true) |
Count the number of set bits in the input number.
Because the operator>>() is poorly defined this only works for unsigned types. This is because there may be a sign bit or two's complement representation of the negative number. Then shifting might cause the sign bit to be shifted into the number itself, possibly causing an infinite loop.
Complexity: run-time: O(n) where n is at most the number of bits used to represent the input type.
Definition at line 305 of file count_setbits.hpp.
typedef unsigned long long jmmcg::LIBJMMCG_VER_NAMESPACE::dyn::unroll::count_setbits::element_type |
Definition at line 306 of file count_setbits.hpp.
|
inlinestaticconstexprnoexcept |
Definition at line 320 of file count_setbits.hpp.
|
inlinestaticconstexprnoexcept |
A fully-unrolled loop-based implementation. This assumes that the compiler is clever enough to inline all of the recursively generated functions, and then re-roll the repeated sequence into an optimal loop for the specified architecture. But also that the processor has enough bitwise-& functional units for the re-rolled loops to contain enough overlapped bitwise-& operations to make it efficient. Moreover the compiler knows the loop bounds statically, so may be able to generate branch-prediction indicators to ensure that the loop is optimally executed.
Definition at line 316 of file count_setbits.hpp.