關於 異或 及 無中間變數進行交換

2022-05-25 07:24:10 字數 854 閱讀 5180

如:

3^53的二進位制是11

5的二進位制是101

011101

-----

110不一樣的位結果為1,否則為0.

110轉換成十進位制是6

所以3^5=6

之前有見到通過 ^ 來進行兩值無中間數交換,現解釋如下:

**:

void swap(int &a, int &b)

a ^= b ==

a = 原a ^ 原b;

b ^= a ==

b = 原b ^ a == 原b ^ (原a ^ 原b) == 原a; //b完成交換

a ^= b ==

a = a^b == (原a ^ 原b) ^ 原a == 原b; //a完成交換,至此 a==b;

附: .與->用法區別

1 "." 該操作符認為左邊的變數是乙個結構或者類物件。

.將取該變數的成員值(操作符右邊的成員)。

2 "->" 該操作符認為左邊的變數是乙個指標。

->將取該指標指向的變數的成員值(操作符右邊的成員)。

所以反推過來,總結這兩個操作符是用來訪問類物件或結構的成員的操作符。

1.如果是結構或類物件的變數,使用操作符"."訪問成員。

2.如果是結構或類物件的指標,使用操作符"->"訪問成員。

#end

關於 異或 及 無中間變數進行交換

如 3 53的二進位制是11 5的二進位制是101 011101 110不一樣的位結果為1,否則為0.110轉換成十進位制是6 所以3 5 6 之前有見到通過 來進行兩值無中間數交換,現解釋如下 void swap int a,int b a b a 原a 原b b a b 原b a 原b 原a 原...

用異或實現交換,可不用中間變數

前面我們談到了,可用通過異或運算交換兩個數,而不需要任何的中間變數。如下面 void exchange int a,int b 然而,這裡面卻存在著乙個非常隱蔽的陷阱。通常我們在對陣列進行操作的時候,會交換陣列中的兩個元素,如exchang a i b j 這兒如果i j了 這種情況是很可能發生的 ...

變數互換方法,中間變數 加減 異或

最常用的變數互換方法是採用中間變數 void swap int a,int b 不用中間變數也可以實現變數互換 void swap int a,int b 這種用兩個變數加減的方法實現互換,仔細一想感覺會有問題,上面程式中,如果 a b 超出int型資料的表示範圍會怎樣?語言中當兩個整數相加超出in...