不用第三個變數,直接交換兩個變數的值
記得曾經看過不用引進第三個變數而直接變換兩個變數的值的例子。見過的兩種方法如下:
方法一:
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中減掉另外的一個,也就實現了二者變數值的變換。對於方法二,由於是用數學中的異或運算,所以反覆利用可以得到預期的效果。
基於以上分析,可以知道許多開發技巧可以來源於數學理論,這種基於數學理論的應用在技術開發上可以弄出很多東西來,在實際的應用中也有著現實性的意義。雖然“不用第三個變數,直接交換兩個變數的值”的方法不是我想到的,不過相信有了強大數學理論背景之後,在開發以及其他創造性工作中,只要注意培養這種應用意識,我們也能創造出這種“伎倆”來,只要善於思考,善於總結,創造性思維還是可以培養出來的。
相關文章
- 不用第三個變數,交換變數的值變數
- Swift交換兩個變數的值Swift變數
- 異或運算的巧用 → 不用額外的變數,如何交換兩個變數的值?變數
- 不使用臨時變數交換兩個變數的值變數
- 如何不使用臨時變數,交換兩個變數的值。變數
- 交換兩個變數變數
- 交換兩個整型變數變數
- 【C語言】給定兩個整型變數的值,將兩個值的內容進行交換C語言變數
- C語言交換兩個變數的值的5種基本方法C語言變數
- c語言 - 交換兩個變數(不建立臨時變數)兩種方法C語言變數
- Excel 多個變數替換 實際值Excel變數
- 面試題-JavaScript交換兩個變數的方法面試題JavaScript變數
- 異或交換兩個數的值
- 數值變數交換常用方法變數
- C++取反交換兩個數的值C++
- JavaScript判斷兩個變數是否相等JavaScript變數
- 列表切片賦值給另一個變數賦值變數
- 給出 Python 中變數名的列表,如何建立一個具有變數名稱作為鍵的字典 (到變數的值)Python變數
- JavaScript 同時宣告多個變數並賦值JavaScript變數賦值
- 數字索引賦值給多個變數簡單表示式索引賦值變數
- 如何列印數值變數變數
- 關於SAP ABAP字元變數和字串變數字元個數的一個知識點,和一個血案字元變數字串
- Octave 數字轉字元,連線兩個字串,以及如何將字串轉換為變數名稱字元字串變數
- 透過交換指標變數的值改變大小數字的位置-學習筆記指標變數筆記
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- JavaScript實現兩個數的交換JavaScript
- 在程式中定義多個同值不同名的變數變數
- 華納雲:linux怎麼將一個變數賦給另一個變數Linux變數
- Java 中將lambda 表示式體中的變數賦值給lambda體之外的一個區域性變數時,要求那個區域性變數是final 修飾的Java變數賦值
- 變數的解構賦值變數賦值
- 不用做任何比較判斷運算子找出兩個整數中的較大的值
- [20210120]in list與繫結變數個數.txt變數
- [20180930]in list與繫結變數個數.txt變數
- C++變數總結束 | 輸出各種變數的值C++變數
- JavaScript - 變數、值、型別JavaScript變數型別
- js修改css變數值實現主題切換JSCSS變數
- Matlab 隨機生成兩個數值之間的隨機數Matlab隨機
- 變數型別轉換變數型別
- 如何獲取變數token的值變數