通過異或交換變數的數值

2021-07-04 02:13:14 字數 541 閱讀 4510

通過異或交換變數的數值,最我最為推薦的swap方法,相比

借用第三變數,「temp = a; a = b; b = temp」 , 異或交換 更有效率!

利用加減法,「a = a + b; b = a - b;  a = a - b」,異或交換 適用範圍更廣。這裡的適用範圍更廣,說得有點牽強。加減法給我的直觀感覺是 不安全,當「a = a + b」的結果超出了該變數型別所支援的數值範圍,會不會出問題?也許是我多慮了,無符號整形有carry(進製或借位 的標誌位),符號整形使用補碼參與運算,都是穩穩的,我在vs下做了測試,沒有出錯。我主要的憂慮是,有些微控制器的c編譯器,真的不夠好。

#include 

void swap(int *a, int *b)

*a ^= *b; // 通過異或發現兩者bit不同之處,bit不同的部分置1,bit相同部分置0

*b ^= *a; // bit相同部分不變,bit不同部分反轉(即0變換1,1變0)

*a ^= *b;

}int main()

位操作筆記 交換數值 使用異或

交換數值指的是,兩個數的數值交換,例如x 1,y 2,交換之後變成x 2,y 1。通過異或來實現交換數值。define swap a,b a b b a a b 上述方法,如果a和b在記憶體中的同一位置,會不起作用,導致數值變為0。如果可能出現a和b在記憶體中的同一位置,那麼可以加入 a b 進行判...

交換的異或實現

如果想交換 a 和 b 的值,我們通常的做法是 宣告乙個臨時變數 temp,然後再實現互換,這種方式常見的讓我幾乎認為 就應該這樣做,但今日拜讀 深入理解計算機系統 一書時,卻發現了另一種巧妙的實現方式,不用第三個位置來臨時儲存,只需位操作 異或 即可。定義 a b a b ab a 為非a 1 1...

異或 實現a和b兩變數交換

今天在看c語言的位運算時,看到了如下交換a,b兩值的方法 a a b b a b a a b 後來想想,真是太神奇了!其實,我們首先知道,對於任意的x滿足 x x 0 x 0 x 那麼上面的式子事實上是利用了如上的規則,首先用a儲存了a b的 值,再用b a b a b b a b b a b b ...