不使用第三個變量來交換兩個變量的值

前言

在一些公司的面試中可能會有些面試官會出一些奇奇怪怪的問題,比如怎麼樣計算1加到100的和要求不能使用加法,減法,循環和if判斷,再比如怎麼樣不用第三個變量來交換兩個變量的值等問題。這裏我們先分析下怎麼樣不用第三個變量來交換兩個變量的值。

正文

通常情況下我們會用第三個變量來進行兩個變量的交換,比如在冒泡排序中會經常用到。那麼怎麼樣不用第三個變量而只通過兩個變量本身來進行交換呢?

swap(a,b); //C++自帶的一個交換函數

swap()這個函數在C++中可以直接用來交換兩個變量,使用很方便,但是如果不能用自帶函數呢?

a=a+b;//a的值變成了a+b的和
b=a-b;//相當於a+b-b,結果就是原來a的值賦值給了b
a=a-b;//相當於a+b-a,結果就是把原來的b的值賦值給了a

這種辦法很巧妙的對兩個變量進行了交換,而不用第三個變量,但是需要注意的是變量的範圍,比如這兩個變量都是int,而int的取值範圍是-2^{31}~2^{31}-1,如果a這個時候剛好是2^{31}-1,那麼再加上b是不是就超過了int的範圍了?是不是就無法完成了交換了?不會。因爲當cpu計算完a+b的時候這個結果會緩存在cache中,當下次要繼續用這個結果的時候會直接從cache中讀取,而不會再次從內存中讀取,這樣的讀取方式能很大程度上提高程序的運行速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章