不使用第三个变量来交换两个变量的值

前言

在一些公司的面试中可能会有些面试官会出一些奇奇怪怪的问题,比如怎么样计算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中读取,而不会再次从内存中读取,这样的读取方式能很大程度上提高程序的运行速度。

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