题解:统计某数中二进制1的个数(取模法 + 看某位是1/0法 + 干掉最右边的1法)
=
1.题目
题目:设计一个程序,统计某数中二进制1的个数
2.取模法
int main() { int num = 15; int count = 0; while (num) { if (num % 2 == 1) count++; num /= 2; } printf("count = %d\n", count); return 0; }=
缺点:当num < 0时,result error!!!
示例:
3.看某位是1/0
确定某一位是0/1,公式如下
公式:ret = (n >> i) & 1
详情:LINK
int main() { int num = -1; int count = 0; int i = 0; while (i < 32) { if (((num >> i) & 1) == 1) count++; i++; } printf("count = %d\n", count); return 0; }=
4.干掉最右边的1
干掉二进制最右边的1,公式如下:
公式:ret = n & (n - 1)
详情:LINK
int main() { int num = -1; int count = 0; while (num) { num = (num & (num - 1)); count++; } printf("count = %d\n", count); return 0; }=
EOF