我们可以把这个二进制数字减去1,和自已做与运算,能做多少次与运算,就说明有多少1,或者是把这个数字与1做与运算,等于1就count+1,然后再右移一位,直到它等于0.
#include "stdio.h"
int countOnes(int num){
int count = 0;
while (num >0){
if ((num & 1) == 1){
count ++;
}
num = (num >> 1);
}
return count;
}
int main() {
int c = countOnes(2);
printf("%d", c);
return 0 ;
}
现在使用位运算的思想
int countOnes2(int a){
int m_1 = 0x55555555;
int m_2 = 0x33333333;
int m_4 = 0x0f0f0f0f;
int m_8 = 0x00ff00ff;
int m_16 = 0x0000ffff;
int b = (a & m_1) + ((a >> 1) & m_1);
int c = (b & m_2) + ((b >> 2) & m_2);
int d = (c & m_4) + ((c >> 4) & m_4);
int e = (d & m_8) + ((d >> 8) & m_8);
int f = (e & m_16) + ((e >> 16) & m_16);
return f;
}