c語言按位異或^的應用例項
阿新 • • 發佈:2018-11-10
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;
}