C语言:二进制中1的位数

题目:请实现一个函数,输入一个整数,输出该数二进制表示中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();
}

运行结果:
在这里插入图片描述

发布了58 篇原创文章 · 获赞 3 · 访问量 2173

猜你喜欢

转载自blog.csdn.net/weixin_43936250/article/details/103997822