Saturday, July 29, 2006

How many '1' in a 32bit integer?

int countone (int n) {
int result;
for (result = 0; result < n;result++)
n &= n-1;
return result;
}

or use the following, I took this course before:
i = (i & 0x55555555) + ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
i = (i & 0x0F0F0F0F) + ((i >> 4) & 0x0F0F0F0F);
i = (i & 0x00FF00FF) + ((i >> 8) & 0x00FF00FF);
i = (i & 0x0000FFFF) + ((i >> 16) & 0x0000FFFF);

No comments:

Post a Comment