版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/melody_1016/article/details/83149647
题目:编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子: 1999 2299
输出例子:7
思路:利用位操作中的“异或”。异或的特征:相同为0.相异为1。先利用两个数进行“异或”操作,得到一个值value,然后问题就演变成了数出这个值value中1的个数,与上一题一样的方法。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
int Dif_bits(int m, int n)
{
//异或的特征:相同为0.相异为1
//所以先异或得到一个值,然后数出这个值中1的个数
int count = 0;
int value = m^n;
while (value != 0)
{
if ((value & 1) == 1)
{
count++;
}
value = value >> 1;
}
return count;
}
int main()
{
int num1, num2;
scanf("%d %d", &num1, &num2);
int count = Dif_bits(num1, num2);
printf("%d", count);
system("pause");
return 0;
}
测试结果: