異或算法

異或:
1表達:a^b=a⊕b=aXORb; 既相同爲0,不同爲1;
1^1=0; 1^0=1;
用途:
1、交互兩個數:a=5,b=10,用異或實現交換

程序代碼:

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

2、因爲電腦的數都是二進制的,所以可以轉化二進制的位數和統計二進制中1或者0是奇數還是偶數。

(1):位反轉
舉例:10001000 在一些情況下,第四位和第五位需要反轉,可以用10001000與00011000進行異或運算。
10001000 ^ 00011000 = 10010000
(2):統計某一位的奇偶數
將某個元素中的每一位逐步異或.
例如a1=1010,則b1=1 ^ 0 ^ 1 ^ 0 = 0,由此可以判斷a中爲1的位數是奇數還是偶數。
例如a2=10110,則b2=1 ^ 0 ^ 1 ^ 1 ^ 0 =1,由此可以判斷a中爲1的位數是奇數還是偶數。

3、找出序列中單個最小的數字:

程序代碼:

#include<stdio.h>
int main()
{
	int a,b,c,d,e,f,n,m;
	scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
	n=a^b^c^d^e;
	printf("%d\n",n);
	return 0;
}

擴展:&(與)運算
都是1時結果才爲1;
二進制與運算規則:1&1=1 1&0=0 0&0=0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章