C语言经典的位运算:求两个数二进制中不同位的个数,入门必做经典题

题目要求

编程实现:求两个数二进制中不同位的个数,两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

输入例子:1999 2299

输出例子:7

解题思路

通过审题我们得知,要求两个数二进制中不同位的个数,那么就得先了解如何操作这两个数的二进制数,我们可以通过位运算或者移位操作来对数得二进制进行操作,此处需要求解的是不同位的个数,即需要判断不同位,我们采用^位异或的操作。

1 ^ 1 = 0; 1 ^ 0 = 1; 0 ^ 1 = 1; 0 ^ 0 = 0;

只有对应位的数相异他们才会变成1,即此时将问题转换为 异或以后的数的二进制中有多少个1,这就简单很多,看过我前几天的那道题,就专门解决这个问题,基本上采用与1进行位与操作,来判断,如果没看过那道题,还请移步至此 :

逻辑实现

#include <stdio.h>
int main()
{	
	int m, n,num = 0;
	printf("请输入两个整数:\n");
	scanf("%d %d",&m,&n);
	//位异或操作,仅有对应位相异才为1,其他全为0
	//只要判断出来操作之后的数
	//其二进制数中有几个1即可
	num = m ^ n;
	int count = 0;
	for (int i = 0; i < 33; i++)
	{
		if (num & 1 == 1)
		{
			count++;
		}
		num = num >> 1;
	}
	printf("%d", count);
	return 0;
}

演示效果

求两个数二进制中不同位的个数


版权声明:本文为qq_33685334原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。