这是之前遇到的题,整理一下:)
题意:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
思路:先想想这个问题,求得是有多少个bit位不同,是不是很熟?所以是不是想起要用异或(^)解决。先异或,再求异或结果中有多少个一,前面博客有仔细写过这个方法https://blog.csdn.net/zd18729850297/article/details/86007143
下面简单介绍一哈操作符异或,两个数异或的结果中,其中比特位为1的代表两个数当前比特位数不同(一个是0,一个是1),其中比特位为0的代表两个数当前比特位数相同(同为0,或者同为1),所以这里使用异或就很好解决问题。
就直接上代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m,n;
int count=0;
int ret;
printf("请输入两个数:");
scanf("%d %d",&m,&n);
ret=m^n;//先两个数异或
while(ret)//求异或结果中有多少个一,前面博客有仔细写过这个方法
{
ret=ret&(ret-1);
count++;
}
printf("%d\n",count);
system("pause");
return 0;
}
VS2008下的运行结果图: