不用第三個變數,直接交換兩個變數的值
記得曾經看過不用引進第三個變數而直接變換兩個變數的值的例子。見過的兩種方法如下:
方法一:
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中減掉另外的一個,也就實現了二者變數值的變換。對於方法二,由於是用數學中的異或運算,所以反覆利用可以得到預期的效果。
基於以上分析,可以知道許多開發技巧可以來源於數學理論,這種基於數學理論的應用在技術開發上可以弄出很多東西來,在實際的應用中也有著現實性的意義。雖然“不用第三個變數,直接交換兩個變數的值”的方法不是我想到的,不過相信有了強大數學理論背景之後,在開發以及其他創造性工作中,只要注意培養這種應用意識,我們也能創造出這種“伎倆”來,只要善於思考,善於總結,創造性思維還是可以培養出來的。
相關文章
- php不用第三個變數,交換兩個數的值PHP變數
- 不用第三個變數,交換變數的值變數
- js不使用第三個變數交換兩個變數的值JS變數
- Swift交換兩個變數的值Swift變數
- 如何交換兩個變數的值變數
- 不使用臨時變數交換兩個變數的值變數
- 異或運算的巧用 → 不用額外的變數,如何交換兩個變數的值?變數
- 交換兩個變數變數
- JavaScript兩個變數交換值(不使用臨時變數)JavaScript變數
- 如何不使用臨時變數,交換兩個變數的值。變數
- 交換兩個整型變數變數
- python 交換兩個變數的方式Python變數
- 面試題-JavaScript交換兩個變數的方法面試題JavaScript變數
- 不借助第三方變數實現兩個整數變數值的互換變數
- C語言交換兩個變數的值的5種基本方法C語言變數
- c語言 - 交換兩個變數(不建立臨時變數)兩種方法C語言變數
- 【C語言】給定兩個整型變數的值,將兩個值的內容進行交換C語言變數
- 數值變數交換常用方法變數
- C++ 引用 (交換兩個數的值)C++
- 總結了幾個在PHP開發時怎麼交換兩個變數的賦值PHP變數賦值
- C++取反交換兩個數的值C++
- C的兩個數值交換(Android之JNI)Android
- 史上最糟糕的兩個變數名變數
- 世上最糟糕的兩個變數名變數
- JavaScript實現兩個數的交換JavaScript
- 網際網路廣告的兩個變數變數
- JavaScript判斷兩個變數是否相等JavaScript變數
- js 判斷兩個變數是否相等JS變數
- 透過交換指標變數的值改變大小數字的位置-學習筆記指標變數筆記
- Java中的兩個特殊變數this和super (轉)Java變數
- 列表切片賦值給另一個變數賦值變數
- Excel 多個變數替換 實際值Excel變數
- java基礎變數的交換Java變數
- 三種交換變數的方法變數
- C++ 一種交換兩個數的思路C++
- 呼叫函式實現兩個數交換函式
- 如何列印數值變數變數
- 數字索引賦值給多個變數簡單表示式索引賦值變數