兩個數的交換(位運算)

2021-08-28 22:58:20 字數 558 閱讀 6813

昨天在重新學習c語言的時候,看到位運算,然後看到乙個有趣的問題,好像以前也看過這個題,就分享一下吧。

兩個數的交換,不借助第三個變數空間。

先放**:

#include #define swap1(a,b) \

#define swap2(a,b) \

#define swap3(a,b) \

int main()

分析:

交換兩個數,在初學c語言的時候,就學習了兩個數的交換函式,還藉此學習了形參和實參。這裡不討論,直接採用了巨集定義。

第一種方法,是我們最容易想到的,借助第三個中間變數,達到交換的目的。

第二種方法,數學中的和差方法,做到了不借助第三個變數,但有乙個缺陷,如果整型a,b數很大,相加超過了int,就會發現有問題。

第三種方法,使用位運算中的異或運算,其最根本思想和第二種類似,但避免了第二種方法的缺陷,突然發現位運算有點神奇。但也有不足,只能運用在整型中,而第乙個就沒這些問題。

所以各有優劣吧。

交換兩個數

問題 如果要求不使用臨時變數,應該如何交換兩個變數的值?解決這個題的方式有好幾種,第一種當然就是使用系統自帶的swap 函式了。不過,這種抖機靈的做法一般人很難欣賞,而且說不定它內部實現使用了臨時變數也說不定 這是使用臨時變數的做法,也是我們在c語言中常用的做法 func swap1 a inout...

兩個數的交換

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

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...