這是之前遇到的題,整理一下:)
題意:兩個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下的運行結果圖: