编程实现:
两个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; }