#include <stdio.h>
//太渣, 负数还不行
int MyNumberOf1InBinary(int num) {
int numOfZero = 0;
int divided = num;
while(divided != 0) {
if(divided % 2 == 1) ++numOfZero; // ==1 都不需要
divided /= 2;
}
return numOfZero;
}
//negative drop-dead halt
int NumberOf1_s1(int n) {
int count = 0;
while(n) {
if(n & 1) {
++count;
}
n = n >> 1;
}
return count;
}
//solution2
int NumberOf1_s2(int n) {
int count = 0;
unsigned int flag = 1;
while(flag) {
if(n & flag) {
++count;
}
flag = flag << 1;
}
return count;
}
//good solution3
int NumberOf1_s3(int n) {
int count = 0;
while(n) {
++count;
n &= n - 1;
}
return count;
}
void Test(int num, int expected) {
printf("Test for %d ", num);
if(expected == NumberOf1_s3(num))
printf("passed.\n");
else
printf("failed.\n");
}
int main(int argc, char* argv[]) {
Test(9, 2);
Test(7 ,3);
Test(4, 1);
Test(0, 0);
Test(-9, 31);
Test(0x7FFFFFFF, 31);
Test(0x80000000, 1);
printf("%d\n", 0x80000000 - 1);
return 0;
}