int hammingWeight(uint64_t n) {
static constexpr uint64_t m2 = 0x0f0f0f0f0f0f0f0f;
static constexpr uint64_t m1 = 0x3333333333333333;
static constexpr uint64_t m0 = 0x5555555555555555;
uint64_t y = n - ((n >> 1) & m0);
y = (y & m1) + ((y >> 2) & m1);
y = (y + (y >> 4)) & m2;
return (y * 0x0101010101010101) >> 56;
}