题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有2位是1。因此,如果输入是9,则函数输出是2。
核心思想:利用位运算,将原数字减去1再与原数字做与运算,等价于将原数字中最右边的1变为0。
写了三个测试用例,分别检测函数在正数、负数、零的情况。
#include<stdio.h>
int NumberOf1(int a) {
int count = 0;
while (a) {
count++;
a = (a - 1) & a;
}
return count;
}
void test1() {
int a = 15;
int count = NumberOf1(a);
printf("test1正数:%d\n", count);
}
void test2() {
int a = -1;
int count = NumberOf1(a);
printf("test2负数:%d\n", count);
}
void test3() {
int a = 0;
int count = NumberOf1(a);
printf("test3 零: %d\n", count);
}
int main() {
test1();
test2();
test3();
}
运行结果: