#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m = 0;
int n = 0;
int i = 0;
int count = 0;
int arr1[32];
int arr2[32];
printf("请输入两个数:\n");
scanf("%d%d", &m, &n);
//求m的每一位
while (m)
{
arr1[i++] = m % 2;
m = m >> 1;
}
i = 0;
//求n的每一位
while (n)
{
arr2[i++] = n % 2;
n = n >> 1;
}
//将m与n的每一位进行比较
for (i = 0; i < 32; i++)
{
if (arr1[i] != arr2[i])
count++;
}
printf("共有count=%d位不同\n", count);
system("pause");
return 0;
}
优化:两个数异或的结果是不用的位全部置1,在判断1的个数即为两个数不同的位数
define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m = 0;
int n = 0;
int i = 0;
int count = 0;
printf("请输入两个数:\n");
scanf("%d%d", &m, &n);
int a = m^n;
while (a)
{
a = a&(a - 1);
count++;
}
printf("共有count=%d位不同\n", count);
system("pause");
return 0;
}