C C 使用異或交換元素及固有的缺點

2021-10-13 22:38:54 字數 738 閱讀 6833

**如下

/** \brief      swap  異或交換兩元素

* \author ***

* \version 1.0

* \date 2020-1-4

* \bug 不能指向同乙個記憶體位址

* * \param[in] a 輸入a

* \param[in] b 輸入a

* \return void

*/void

swap

(int

*a,int

*b)

下面來解釋這段**,首先基於兩個異或的知識點

1. 自己和自己異或等於0,即a^a=0

2. 0和任何數異或等於它自己,即0^a=a

接著下面的**就很好理解了

a^b^b =a^

0=a // 第一句**^第二句**

a^a^b =

0^b=b // 第三句**

看著有點傻,這肯定啊。上面的三句**的原理就是這兒,仔細想想就知道了

注意:該函式有乙個缺點,a和b不能指向同乙個記憶體單元,這樣就變成0了哈,如果實際情況存在這種情況就不能用哈,這種方式確實節約了乙個臨時變數的儲存空間。

答案:一直異或下去,結果就是答案哈

哈哈,這個自己想…

使用異或實現兩數交換

如果a b兩個值不相同,則異或結果為1。如果a b兩個值相同,異或結果為0。異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法 二進位制下用1表示真,0表示假,則異或的運算法則為 0 0 0,1 0 1,0 1 1,1 1 0 同為0,異為1 這些法則與加法是相同的,只是不帶進製,所以異或常被...

異或操作交換元素容易產生的問題

利用異或操作交換兩個元素已不是什麼新鮮話題了。1異或寫法 2傳統寫法 有很多程式設計師已經逐漸接受並喜歡使用這種異或寫法了,問之優點,大多數程式設計師都會從時間效能,空間效能,簡潔性三方面做回答。由於位操作較賦值操作的確快了些,空間上僅僅節約乙個單位,至於簡潔性就有點牽強了 明顯差不多嘛 可讀性反倒...

使用異或交換資料值的原理

大家都知道,假如有a,b兩個整型數,我們可以用 a b b a a b 來交換a,b的值,在這裡我說說其中的原理 在 c 裡面是按位異或操作符,相同的話異或的結果就是 0,不同的話就是 1。舉個例子,比如 a 表示十進位制的 5,b 表示十進位制的 12,按位異或結果就是 a 0101 5 的二進位...