编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子:1999 2299输出例子:7
今天我想通过操作符里的知识,通过简单的异或关系完成题面要求。
思路:将两个数异或,即可将相同位全部清0,不同位全部置1,然后只需统计出1的个数即可找到答案
代码如下(代码中有较为详细的注释):
#include<stdio.h>
#include<windows.h>
#pragma warning(disable: 4996);
int bin_diff_bit(int m, int n)
{
int tmp = m ^ n; //将两个数异或之后,将相同位清0,不同位全部为1
int count = 0;
while (tmp)
{
tmp = tmp & (tmp - 1);//这一步是为了找m,n异或之后有多少个1;遇到一个1,才进行count++
count++;
}
return count;
}
int main()
{
int m, n;
printf("Please enter two integers: ");
while (scanf("%d %d", &m, &n) == 2) //成功读取两个有效数字才可以进行下一步
{
printf("%d\n", bin_diff_bit(m, n));//调用函数
}
system("pause");
return 0;
}