两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int diff_num(int a,int b)
{
int a_arr[32] = { 0 }, b_arr[32] = { 0 };
int i = 0, j = 0;
int count = 0;
while (a) {
a_arr[i] = a % 2;
a /= 2;
i++;
}
while (b) {
b_arr[j] = b % 2;
b /= 2;
j++;
}
for (int i = 0; i < 32; i++)
{
if (a_arr[i]!=b_arr[i])
{
count++;
}
}
return count;
}
int main()
{
int a,b;
printf("请输入两个整数:\n");
scanf("%d %d", &a,&b);
int num=diff_num(a,b);
printf("这两个数的二进制表达式有%d个位(bit)不同\n",num);
system("pause");
return 0;
}
第二种思路:
对a和b两个整数取 异或 运算,这样只要有任何一个数字的对应位是不相同的,结果就是1,最后查看异或的结果中的1的位数,即所求不同的个数。