题目:查看两个int(32位)数的二进制有几位不同。
分析:要理解该题目的意思,就要明白C语言中关于位的一些操作符。
1)“&",按位与操作符,从低位到高位对两个数的每位进行与操作,如1001&1101=1001,都为1则取1;
2)"|",按位或操作符,有一个是1就取1;
3)"^",异或,不同则取1;
4)"~",非操作符,用来对一个二进制数按位取反;
5)"<<",左移操作符,右边补0;
6)">>",右移操作符,对于无符号数,左边补0
知道了这么多先验知识,就可以美美的操作这个题,首先用一个异或,可以得到两数的不同,i的作用是每次向左移,查看该位置是否是1,k是计数,根本就不用转换成二进制,很好理解!
#include<stdio.h> void checkDifference(int a,int b) { int k=0,i; for(i=0;i<32;i++) { if((a^b)&(1<<i)) { k++; printf("第%d位不同!\n",i); } } printf("共%d位不同\n",k); } int main() { int a,b; while(scanf("%d %d",&a,&b)!=EOF) { checkDifference(a,b); } return 0; }
时间: 2024-11-05 18:53:08