题目要求
编程实现:求两个数二进制中不同位的个数,两个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;
}