交換兩個數的位置,不引入新引數 求異詳解

2021-09-25 20:48:00 字數 763 閱讀 1401

交換兩個數的位置,不匯入新引數,目前常見的有三種辦法:

​ 1.引入新變數;

​ 2.通過加減法;

​ 3.異或;

前面兩種都很好理解,關於異或往往只會會注釋一句對乙個值連續異或,結果還是他本身,今天就通過簡單計算讓大家進一步了解異或;

首先,講一下概念,異或(xor)是乙個數**算符。它應用於邏輯運算。異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法:二進位制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進製,所以異或常被認作不進製加法。用通俗點的話說就是,兩個值不同為真,兩個值相同為假;

下面,我們取兩個數進行簡單的示例;

​ 我們取3 ,二進位制位0011,和4 ,二進位制為0100;

​ 0 0 1 1****3

^0 1 0 0****4

​ 0 1 1 1****7

結果為0111,換成十進位制結果為7,那麼一定會有人認為這就是加法。我們把剛才得到的值繼續處理;

​ 0 1 1 1****7

^0 1 0 0****4

​ 0 0 1 1****3

結果有變回了0011也就是3,即3 ^ 4 ^ 4=3.

所以我們通過 x=x^ y ; y=x^ y; x=x^ y;即可以交換兩個引數的位置了。

不知道大家看完這邊文章,對異或有沒有更深一步的了解呢~

不引入新的陣列,實現陣列元素交換位置函式

最近遇到一道c 的面試題,要求不引入新的陣列,實現陣列元素交換位置函式,看似挺簡單的,卻還是花費了我不少時間,這裡記錄下來,給大家乙個簡單的思路。題目的詳細要求是 不引入新的陣列,實現陣列元素交換位置函式 void swap int a,int m,int n 比如,設m為3,n為4,a中的資料為 ...

不引入新的陣列,實現陣列元素交換位置函式

最近遇到一道c 的面試題,要求不引入新的陣列,實現陣列元素交換位置函式,看似挺簡單的,卻還是花費了我不少時間,這裡記錄下來,給大家乙個簡單的思路。題目的詳細要求是 不引入新的陣列,實現陣列元素交換位置函式 void swap int a,int m,int n 比如,設m為3,n為4,a中的資料為 ...

兩個數的交換

一般思路 建立乙個臨時變數,以這個臨時變數為中間變數,利用賦值來完成兩個數的內容的相互交換。如下 include int main 優化方案 1.上述方法中需要另外建立乙個變數,略微有些麻煩,若是要求不能建立臨時變數,則可以採用數學上的加法來進行一些變通。如下 include int main 2....