天天看點

不用第三個變量,直接交換兩個變量的值

記得曾經看過不用引進第三個變量而直接變換兩個變量的值的例子。見過的兩種方法如下:

方法一:

var a=1;

var b=2;

a=a+b;

b=a-b;

a=a-b;

輸出a,b可以發現兩值已經交換

方法二:

var a=1;

var b=2;

a=a^b;

b=a^b;

a=a^b;

輸出a,b可以發現兩值已經交換

這兩種方法表面看起來隻是一種技巧,有點小伎倆了,不過在嵌入式的開發上,卻有着極大的作用。因為在嵌入式開發中,空間有限,引入的變量越少,節省的空間也就越多,開發的可利用空間就相對變大了。是以這種技巧是十分常用的一種技巧。

對于以上兩種方法簡單分析如下:

方法一中邏輯思維表現得相對明顯一些,可了解性容易一些。方法二在速度上相對快一些,因為是直接利用位運算,是以在時間上表現略有優勢。

從數學角度考慮,其實這兩種技巧中都蘊含了集合論的數學思想。可以這樣了解,在方法一中把a+b看作一個大的集合,而從這個集合中減掉一個,所剩下的差集就是另外的一個變量了。同樣的方式,在a+b中減掉另外的一個,也就實作了二者變量值的變換。對于方法二,由于是用數學中的異或運算,是以反複利用可以得到預期的效果。

繼續閱讀