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;
}

演示效果

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友人和他的朋友们

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值