求兩個數的二進制中有多少個位不同?

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

發佈了95 篇原創文章 · 獲贊 16 · 訪問量 8775
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章