编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(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;
}
本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1708419