「從交換兩個值」談起

2021-09-30 05:40:36 字數 1066 閱讀 7827

交換兩個值,這是任何一門語言書籍都會談起的,今天我們還**這個看似簡單,實則有點意思問題。我們用c++的語法來講解,其他語言都可以共通!

我們假設有兩個整形變數,定義如下:

int ntemp1 = 23,ntemp2 = 39;

第一種方式:借用

int ntemp = ntemp1;

ntemp1 = ntemp2;

ntemp2 = ntemp1;

該種方式完成後,ntemp1和ntemp2會正確交換。。。但是該種也是最消耗資源,消耗時間的!

第二種方式:加減法

ntemp1 = ntemp1+ ntemp2;

ntemp2 = ntemp1 - ntemp2;

ntemp1 = ntemp1 - ntemp2;

該種方式能完成一些資料的交換,因為這種方式用到 + 運算,所以不得不考慮溢位情況!

第三種方式:乘除法

ntemp1 = ntemp1 * ntemp2;

ntemp2 = ntemp1  / ntemp2;

ntemp1 = ntemp1  / ntemp2;

該種方式能完成一些資料的交換,這種方式只能運用到整數上!

第四種方式:抑或

ntemp1= (ntemp1^ ntemp2);

ntemp2= (ntemp2 ^ ntemp1);

ntemp1= (ntemp1^ ntemp2);

該種方式完全沒有用緩衝變數及二進位制的運算,從而節約了資源和時間!    不知道為什麼的,建議隨便拿本書看看 ^ 的用法。

第五種方式:壓棧

_asm

這裡用到內聯彙編,內聯彙編中堆疊的「後進先出」的優勢,使交換更容易!

第六種方式:xchg指令

_asm

彙編中的xchg指令是交換兩個運算元的位置,在vc++中內聯彙編繼續保留了xchg指令,所以我們依然可以用這個指令完成兩個數值的交換!

交換兩個數的數值方式就介紹完了,後面兩種方式使用了彙編的解決方案。在我的機子測試過,第6種方式所需時間是最少的!至於那個 ^ 運算和內聯彙編的使用不懂的,大家google吧,在此不在贅述了!

從「交換兩個變數而不用臨時變數」談起

問題 寫乙個函式,實現交換兩個變數,但不能用臨時變數?分析 交換兩個變數的這一功能,我們用的比較多,也可以很容易的寫出乙個出來,但是題目要求的是不能用臨時變數。並且題目也沒有說明變數是什麼型別,它是int,char,double,還是自定義的結構體,或者是類型別,雖然可以用模板從某種程度上解決這一些...

從「交換兩個變數而不用臨時變數」談起

問題 寫乙個函式,實現交換兩個變數,但不能用臨時變數?分析 交換兩個變數的這一功能,我們用的比較多,也可以很容易的寫出乙個出來,但是題目要求的是不能用臨時變數。並且題目也沒有說明變數是什麼型別,它是int,char,double,還是自定義的結構體,或者是類型別,雖然可以用模板從某種程度上解決這一些...

交換兩個變數的值

交換兩個變數的值 交換兩個變數的值是我們學習c語言常見的問題,通常我們採取的方式是定義中間變數,通過中間變數交換這兩個變數值。1 直接在主函式裡完成 int a 2,b 3 int t t a a b b t 2 通過定義swap 完成交換,其中可以通過引用 位址傳遞完成變數值交換 引用 inclu...