您的位置:首页 > 其它

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

2015-10-31 21:17 232 查看
编程实现:
两个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  异或 二进制