給定兩個數(A,B),求他們的二進制中多少位(bit)不一樣?

思路: 首先,廣泛的思想,確定是先將倆個數轉化爲二進制形式,而後保存到數組中,分別一個個進行比較。這樣能夠,但時間花費較長。至少須要兩個循環操做。因此,個人方法是: int c= a&b; 能夠求出倆個數中相同位置的1的個數。 int d=a|b; 全部有1的位置,也能夠理解爲0位置相同的個數。 而後用機器位數減去相同的,即爲不一樣的。或用下邊的異或的方法 int f=c^d; 不一樣的位置個數 具體代碼以下:數組

int main()
{
	cout<<"test is a example"<<endl;
	int a=43,b=102;
	int num1=0,num2=0;
	int c=a&b;
	int d=a|b;
	while(c)
	{
	  c &=(c-1);
	  num1++;
	}
	cout<<num1<<endl;
	while(d+1)
	{
	  d |=(d+1);
	  num2++;
	}
	cout<<num2<<endl;
	cout<<"有"<<32-(num1+num2)<<"位須要變化"<<endl;
    return 0;
}
相關文章
相關標籤/搜索