, , - . , . . 4 ( SSE?). ( ) . .
unsigned bitcount2(const uint64_t *long_ptr, size_t begin, size_t end)
{
uint64_t mask[] = { 0, 0, 0, ~((1ULL << (begin & 63)) - 1), -1LL, -1LL, -1LL, ((1ULL << (end & 63)) - 1), 0, 0, 0 };
uint64_t* b_start = mask+(3 - begin / 64);
uint64_t* b_end = mask + (7 - end / 64);
return bitcount(long_ptr[0] & b_start[0] & b_end[0]) +
bitcount(long_ptr[1] & b_start[1] & b_end[1]) +
bitcount(long_ptr[2] & b_start[2] & b_end[2]) +
bitcount(long_ptr[3] & b_start[3] & b_end[3]);
}