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 |
Public Member Functions | |
BOOST_STATIC_ASSERT ((sizeof(element_type) *8)<=std::numeric_limits< typename cache_t::range_type >::max()) | |
Static Public Member Functions | |
static | __attribute__ ((pure)) 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/s) where n is at most the number of bits used to represent the input type, and s is the number of bits used to represent the size of the cache. Space: O(s)
Definition at line 223 of file count_setbits.hpp.
typedef unsigned long long jmmcg::LIBJMMCG_VER_NAMESPACE::dyn::lookup::count_setbits< NumBits >::element_type |
Definition at line 231 of file count_setbits.hpp.
|
inlinestaticnoexcept |
A loop-based implementation, using a cache. Note that this implementation assumes that the % and / operations when using divisors that are powers of 2 is fast either because:
Definition at line 240 of file count_setbits.hpp.
jmmcg::LIBJMMCG_VER_NAMESPACE::dyn::lookup::count_setbits< NumBits >::BOOST_STATIC_ASSERT | ( | (sizeof(element_type) *8)<=std::numeric_limits< typename cache_t::range_type >::max() | ) |
|
inlinestaticconstexprnoexcept |
Definition at line 248 of file count_setbits.hpp.