编程实现:

两个int32位)整数mn的二进制表达中,有多少个位(bit)不同? 

输入例子:1999 2299

输出例子:7

1、利用移位运算,将32位二进制数保存在数组中,然后比较两个数组中各个元素是否相同。

代码如下:

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int m,n,arr1[32],arr2[32],i=0,count=0;
	scanf("%d%d",&m,&n);
        for(i=0;i<32;i++)
	{
		arr1[i]=(m>>i)&1;//通过移位和与运算,将二进制数保存在数组中
        }
	for(i=0;i<32;i++)
	{
		arr2[i]=(n>>i)&1;
	}
	for(i=0;i<32;i++)
	{
		if(arr1[i]!=arr2[i])//比较两个数组中相应元素是否相等
		count++;
	}
	printf("count=%d",count);
	system("pause");
	return 0;
}

2、直接进行异或(二进制按位异或),然后求取“1”的个数。

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int num1,num2,num;
	int count=0;
	scanf("%d%d",&num1,&num2);
	num=num1^num2;//用异或法方便解,例如:num1为1011和num2为0001,则num为1010,
        while(num)
       {
              count++;
    	      num=num&(num-1);//依次取掉后面的1。(num-1)&num为(1010-0001)&1001=1000
   	}
	printf("count=%d\n",count);
	system("pause");
	return 0;
}