面試題 不使用任何中間變數交換兩個值的大小

2021-08-14 22:44:43 字數 755 閱讀 5570

//不使用中間變數如何將a,b值交換 

大家都知道,假如有a,b兩個整型數,我們可以用

a^=b;

b^=a;

a^=b;

來交換a,b的值,總結一下我個人的理解:

^ 在 c 裡面是按位異或操作符,相同的話異或的結果就是 0,不同的話就是 1。。

牢記以下兩條原則:

任何一位二進位制數同 1 異或都會變成另外乙個(0 同 1 異或的結果是 1,1 同 1 異或的結果是 0)

任何一位二進位制數同 0 異或都保持不變(0 同 0 異或的結果是 0,1 同 0 異或的結果是 1)

因為 c 中是 1 的部分表示 a 和 b 中按位不同的位,0 表示 a 和 b 中按位相同的位,那麼 a 同 c 異或的結果就是 a 中與 b 不同的位發生變化,二進位制數每位只有兩種狀態,所以 a 變成了 b:

a = 0101

c = 1001

----

b = 1100

同樣, b 與 c 異或結果就變成了 a:

b = 1100

c = 1001

----

a = 0101

不使用中間變數交換兩數

交換兩個數的值是比較基礎也比較常用的演算法,比如在氣泡排序法中,從第一數開始比較,如後乙個數比其小則交換兩數的值。一般在交換兩數的值是,最簡單的方法適用的方法就是用中間變數暫存乙個數。例如,要交換a,b的值,可使用中間變數c暫存其中的乙個數。核心 如下 c b b a a b 當然也可以不使用中間變...

不使用中間變數交換兩個數

在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。temp a a b b temp 通過巧妙的加法與減法運算來實現兩個數的交換。a a b b a b a a b 使用位運算 異或 來交換兩個數。a a b b a b a a b 其正確性是因為異或運算滿足 交換律和 結合律。證...

不使用中間變數交換兩個數

在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。temp a a b b temp 通過巧妙的加法與減法運算來實現兩個數的交換。a a b b a b a a b 使用位運算 異或 來交換兩個數。a a b b a b a a b 其正確性是因為異或運算滿足 交換律和 結合律。證...