PPaste!

bitCount datalab

Home - All the pastes - Authored by Thooms

Raw version

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
int bitCount(int x) {
    /* We start by counting the number of bits in each byte. We count all bits
     * in by hand, by shifting and masking in parallel.
     * Once we've counted all bits in every byte, we sum the count by shifting
     * every byte.
     */
    int mask1 = 0x1 | 0x1 << 8 | 0x1 << 16 | 0x1 << 24;
    int mask2 = 0xFF;
    x = (x & mask1) + ((x >> 1) & mask1) + ((x >> 2) & mask1) + \
        ((x >> 3) & mask1) +  ((x >> 4) & mask1) + ((x >> 5) & mask1) +\
        ((x >> 6) & mask1) + ((x >> 7) & mask1);
    x = (x & mask2) + ((x >> 8) & mask2) + ((x >> 16) & mask2) + ((x >> 24) & mask2);
    return x;
}