如果在诸如ARM等32位处理器上,你可以使用以下函数:
unsigned long CalOneBits(unsigned long val) { val = (val & 0x55555555) + ((val & 0xaaaaaaaa) >> 1); val = (val & 0x33333333) + ((val & 0xcccccccc) >> 2); val = (val & 0x0f0f0f0f) + ((val & 0xf0f0f0f0) >> 4); val = (val & 0x00ff00ff) + ((val & 0xff00ff00) >> 8); val = (val & 0x0000ffff) + ((val & 0xffff0000) >> 16); return val; }
|