交換兩個值,這是任何一門語言書籍都會談起的,今天我們還**這個看似簡單,實則有點意思問題。我們用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...