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

 本文适合C语言初学者,请自行判断是否观看


      各位读者好,今天我们来处理“两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?”这样的问题。

目录:

  1. 问题的说明
  2. 解题的思路
  3. 解题过程
  4. 完整代码

1.问题的说明

       众所周知,int类型的大小是四个字节,对应32位。若在其中存放数字,就会得到一串有三十二个0或者1组成的二进制数字。如10,其32位二进制数字位“00000000000000000000000000001010”,而在本题中,我们要做的就是将其与另外一串二进制数字作比较,得出两串数字的每一位是否相同,不相同则计数。

2.解题的思路

        这道题可能有很多解法,本文我们介绍其中一种,即使用位操作符来解题。按位与“&”的口诀是著名的“二者皆真即为真,其他全部都是假”(我自己编的♪(^∇^*)  )。我们可以将两串数字分别按位与1,其结果只有一种0000~~001或者0000~~000,因此如果两串数字的那一位相同,则其与1的按位与结果必然相同,于是思路便打开了。

3.解题过程

首先我们创建main函数,定义整型m,n,

    int m = 0;
	int n = 0;
	scanf("%d %d", &m,&n);

分别将m和n按位与1

int a = m & 1;
int b = n & 1;

判断结果,如果a和b不等,则进行下列操作,

        if (a != b)
		{
			count++;
			m >>= 1;
			n >>= 1;
		}
		

 count计数,m和n都向右移一位。(去掉数字右边一位,左边加0)

反之,如下


else
{
	m >>= 1;
	n >>= 1;
}

因为这些语句要执行多次,所以这里可以采用while循环

while (m != 0 || n != 0)

最后打印count的数值

printf("%d", count);

结束。

4.完整代码

int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m,&n);
	int count = 0;
	while (m != 0 || n != 0)
	{
		int a = m & 1;
		int b = n & 1;
		if (a != b)
		{
			count++;
			m >>= 1;
			n >>= 1;
		}
		else
		{
			m >>= 1;
			n >>= 1;
		}
	}
	printf("%d", count);
	
	return 0;
}

最后,欢迎各位读者的批评和建议!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值