異或運算的妙用,兩個整型變數交換位置

2021-09-01 09:55:07 字數 702 閱讀 9219

異或運算符號 ^

按照二進位制的位進行異或運算 兩個位分別為1、0(不分前後)結果為1,其他都為0

例如十進位制 二進位制

1 12 10

3 11

4 100

5 101

1^2結果二進位制就是11 轉換成十進位制就是3

4^5結果是1  轉換成十進位制還是1

根據上面的我們再來看

1^2=3

3^2=?

3的二進位制11  2的二進位制10

很顯然結果是1

4^5=1

4^1=5

5^1=4

根據這些 可以得出

如果a^b=c 成立

那麼可以推算出

a^c=b

b^c=a

這個特點可以用來兩個數字交換

int x=1;  //公式中的a

int y=2; //公式中的b

x=x^y; //x變成公式中的c

y=x^y;//這句相當於 b^c可以得出a ,這時候y就有了原來a的值 y=a

x=x^y;//這句中 x=c y=a c^a=b 這時候x就有了原來b的值 x=b

//到這裡

//x=2 y=1

//兩數字交換完成,沒有用到中間變數

以上方法支援int 和long型別

使用異或運算交換兩個變數的危險

我們知道,在排序演算法中經常會需要交換序列中的兩個變數,常見有兩種方法 1.借助第三個臨時變數 交換 int temp array i array i array index array index temp 2.借助異或運算的特性 array i array i array index array...

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...