1. 程式人生 > >c語言按位異或^的應用例項

c語言按位異或^的應用例項

1.若a ^ b = c; 則有a ^ c = b, b ^ c = a;

例:將兩個整形變數交換(不建立臨時變數)

這裡就可以用到上面得到的規律來寫,在寫程式碼之前先給上面的規律附上具體值來驗證一下:

           10的二進位制     01010
           20的二進位制     10100

                       01010                         11110                             11110     
                    ^ 10100                      ^ 10100                           ^ 01010
     
                       11110                         01010                             10100   

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
        a = a ^ b;
        b = a ^ b;
	a = a ^ b;
	printf("%d  %d", a, b);
	return 0;
}

如上程式碼就是通過異或^將兩個整形變數交換的例項;

2.  連續異或:對應位上1的個數為偶數個時,最終結果對應位為0;為奇數個時,最終結果對應位為1。

例:一組資料中只有一個數字出現了一次,其他所有數字都是成對出現的,請找出這個數字。

分析問題:只有一個數字出現了一次,其他的數字都出現了兩次,那麼將出現兩次的數字兩兩異或得到0,最後再異或只出現一                     次的數字,結果就得到這個數字。異或沒有先後次序,所以可以打亂次序,那麼將這些數全部異或便可得到只出現了                   一次的那個數字。

#include<stdio.h>

int find(int arr[], int len)
{
	int ret = 0;
	int i = 0;
	for (i = 0; i < len; i++)
	{
		ret ^= arr[i];
	}
	return ret;
}

int main()
{
	int arr[] = {1,2,3,4,5,6,7,7,6,4,3,2,1};
	int len = sizeof(arr) / sizeof(arr[0]);
	printf("%d\n", find(arr, len));
	return 0;
}