27 lines
522 B
C++
27 lines
522 B
C++
#include <bit>
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
|
|
static const unsigned char BitsSetTable256[256] =
|
|
{
|
|
# define B2(n) n, n+1, n+1, n+2
|
|
# define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2)
|
|
# define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2)
|
|
B6(0), B6(1), B6(1), B6(2)
|
|
};
|
|
|
|
uint32_t main(uint32_t v)
|
|
{
|
|
unsigned int c; // c is the total bits set in v
|
|
|
|
// Option 1:
|
|
c = BitsSetTable256[v & 0xff] +
|
|
BitsSetTable256[(v >> 8) & 0xff] +
|
|
BitsSetTable256[(v >> 16) & 0xff] +
|
|
BitsSetTable256[v >> 24];
|
|
|
|
return c;
|
|
}
|