#define S2

int hammingWeight(int n)
{
#ifdef S1
    int weight = 0;
    for (int i = 0; i < 32; i++)
        if (n & (1u << i))
            weight++;

    return weight;
#endif

#ifdef S1_O
    int weight = 0;
    while (n)
    {
        n &= n - 1;
        weight++;
    }

    return weight++;
#endif

#ifdef S2
    unsigned i = (unsigned)n;
    i = i - ((i >> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
    i = (i + (i >> 4)) & 0x0f0f0f0f;
    i = i + (i >> 8);
    i = i + (i >> 16);
    return (int)(i & 0x3f);
#endif
}

int main()
{
    return 0;
}
