C#中交換兩個數的值


前言:以前很習慣性的就利用第三方(即一個中間變量)來交換兩個數的值,后來在一次面試中,那個經理問我怎么交換兩個變量的值,我就很熟悉的說用一個中間變量。后來經理說不借助中間變量應該怎么交換,當時我沒想出來,現在把交換兩個變量的值總結了一下,既有自己的理解也有百度上的東西。

(1)先說一下我們經常用的那個方法,即借助一個中間變量。代碼如下:

1             int a, b, temp;
2             a = 10;
3             b = 5;
4             temp = a;
5             a = b;
6             b = temp;

這種算法易於理解,特別適合幫助初學者了解計算機程序的特點,是賦值語句的經典應用。
所以咱們至少應該掌握這種算法。

(2)下面就講一下怎么不用中間變量來實現兩個值得交換。加上我知道的和百度上的,一共總結了三種算法。如下

第一種稱為算術運算

簡單來說就是通過普通的+和-運算來實現,代碼如下:

1            int a, b;
2             a = 10;
3             b = 2;
4             a = b - a;//a=-8,b=10
5             b = b - a;//a=-8,b=10
6             a = b + a;//a=2,b=10 交換成功

這種方法表面看起來簡單,但是卻不容易想到,現在說一說它的原理:把a、b看做是數軸上的兩點,圍繞兩點間的距離來進行計算。具體過程如下:

a=b-a;求出ab兩點的距離,並將結果保存在a中;b=b-a;求出a到原點的距離,並將結果保存在b中;a=b+a;求出b到原點的距離,並將結果保存在a中。這樣就交換了ab兩個數的值。

第二種是位運算

通過異或運算來實現兩個變量值的交換,這應該算是最神奇的算法了,現在揭曉一下代碼吧。

1             int a, b;
2             a = 20; b = 2;
3             a = a ^ b;//a=10100,b=0010,兩者相異或的結果是10110,並保存在a中。
4             b = a ^ b;//a=10110,b=0010,兩者相異或的結果是10100,並保存在b中,換成二進制是20
5             a = a ^ b;//a=10110,b=10100,兩者相異或的結果是00010,保存在a中,換成十進制是2

 

異或的意思即是相同為0,不同為1,通過異或運算能夠是數據中的某些位翻轉,其中一個數與任意一個給定的值連續異或兩次,值不變,這就是位運算的原理。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM