.写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int value) { // 返

写一个函数返回参数二进制中 1 的个数

比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
写一个函数返回参数二进制中 1 的个数
比如: 15 的二进制表示为 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
&:按位与
位操作中的与操作运算符。
也就是常说的and操作,双目运算符。
计算的时候按位计算,&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0
比如 15 0000 1111 4个1 (我省略了前面24个0一共有32位 下面也是)
判断二进制上每一位的值:
先判断二进制第一位的值------
15 0000 1111
&
1 0000 0001
结果 0000 0001
再判断第二位------>
右移
左边补0
15左移 0000 0111
所以 (value>>i)&1==1 num++
代码如下

#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
	int i;
	int num=0;
	int c = 1;
	for (i = 0; i < 32; i++)//整形4个字节 32位
	{
		if ((value >> i) & 1 == 1)
		{`
			num++;
		}
	}
	
	return num;
	
	// 返回 1的位 
}

int main()
{
	printf("输入一个你你想要判断的数让程序来判断它在二进制中1的个数\n");
	int value,num;
	scanf("%d", &value);
	num = count_one_bits(value);
	printf("这个数在二进制中1的个数为%d\n", num);
	system("pause");
	return 0;
}

还可以直接移位
代码如下

#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
	int i;
	int num=0;
	// 00000000 00000000 00000000 00000001
	// 一直左移动 右边补 0
	// 32次之后
	// 00000000 00000000 00000000 00000000 这就是判断循环结束的条件 等于0的时候
	for (i = 1; i != 0;i<<=1 )
	{
		if ((value&1)==1)
		{
			num++;
		}
		value  >>=1; 
	}
	
	return num;
	
	
	// 返回 1的位数 
}
int main()
{
	printf("输入一个你你想要判断的数让程序来判断它在二进制中1的个数\n");
	int value,num;
	scanf("%d", &value);
	num = count_one_bits(value);
	printf("这个数在二进制中1的个数为%d\n", num);
	system("pause");
	return 0;

}

第三种方法

  #include<stdio.h>
#include<stdlib.h>
int main(){
	printf("请输入你想要输入的两个值(用空格隔开)\n");
	int m, n, i, num=0;
	scanf("%d %d", &m, &n);
	for (i = 0; i < 32; i++)
	{
		if (((m >> i) & 1) != ((n >> i) & 1))
		{
			num++;
		}

		


	}

	printf("整数m和n的二进制表达中有%d个不同", num);



	system("pause");
		return 0;
}
发布了17 篇原创文章 · 获赞 4 · 访问量 441

猜你喜欢

转载自blog.csdn.net/printfscanfmng/article/details/84727122