用異或運算子實現不用第三個臨時變數交換兩個變數的值

2022-08-10 15:12:14 字數 535 閱讀 3743

一般我們在程式設計時要實現兩個變數值的交換,都會借助於乙個臨時變數

但有沒有一種方法可以不要臨時變數呢?

我們先熟悉一下異或運算法則:

1. a ^ a = 0

2. a ^ b = b ^ a

3. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;

4. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.

5. a ^ b ^ a = b.

現在程式設計實現不要臨時變數實現兩個變數 m,n的交換。

m = m^n;

n = m^n;

m = m^n;

結束。看不明白?或者懷疑有沒有這麼簡單?

由異或運算法則可以知道:

m = m^n^n;

n = n^m^m;

上個例子中,

第二句 n = m^n,擴充套件開來就是:n = (m^n)^n,右邊式子等於m;

異或運算還是神奇!

這有一篇博文**了用異或交換多個變數值的方法,當然也是不用臨時變數了。

如何不用第三個變數實現兩個數的交換

一般我們在寫程式時如果遇到兩個數需要交換時寫作如下 1 intx,y 23 inttemp 45 temp x x y y temp 而如果不允許有第三個變數出現即不允許有temp出現時應該如何做呢?可以寫作如下 1 intx,y 23 x x y 45 y x y 67 x x y 上述一般可以滿...

不用算術運算子實現兩個數的加法 按位異或

用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下1 1 01 0 1 0 1 10 0 0很明顯這幾個表示式可以用位運算的 來代替,如下1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數加法...

不用算術運算子實現兩個數的加法 按位異或

對於二進位制的加法運算,若不考慮進製,則1 1 0,1 0 1,0 1 1,0 0 0,通過對比異或,不難發現,此方法與異或運算類似。因而排出進製,加法可用異或來實現。然後考慮進製,0 0進製為0,1 0進製為1,0 1進製為0,1 1進製為1,該操作與位運算的 操作相似。那麼加法運算可以這樣實現 ...