不用第三个变量,直接交换两个变量的值
2014-04-10 11:08
309 查看
方法一:
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中减掉另外的一个,也就实现了二者变量值的变换。对于方法二,由于是用数学中的异或运算,所以反复利用可以得到预期的效果。
基于以上分析,可以知道许多开发技巧可以来源于数学理论,这种基于数学理论的应用在技术开发上可以弄出很多东西来,在实际的应用中也有着现实性的意义。虽然“不用第三个变量,直接交换两个变量的值”的方法不是我想到的,不过相信有了强大数学理论背景之后,在开发以及其他创造性工作中,只要注意培养这种应用意识,我们也能创造出这种“伎俩”来,只要善于思考,善于总结,创造性思维还是可以培养出来的.
【分析】
(1)第一种方法有数据溢出的缺陷
(2)可以通过数学上的图来分析这两种算法:
A+B即A与B的并集,然后再A-B即从这个并集中减去B的部分(重合部分算两份),剩下的就是A。从并集中减去A的部分,剩下的就是B。
A^B就是A和B的非交集的部分(我也不知道数学上怎么称呼),然后再异或上B,是什么意思呢?意思就是两者不相交的部分,从图上可以看出,就是A。
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中减掉另外的一个,也就实现了二者变量值的变换。对于方法二,由于是用数学中的异或运算,所以反复利用可以得到预期的效果。
基于以上分析,可以知道许多开发技巧可以来源于数学理论,这种基于数学理论的应用在技术开发上可以弄出很多东西来,在实际的应用中也有着现实性的意义。虽然“不用第三个变量,直接交换两个变量的值”的方法不是我想到的,不过相信有了强大数学理论背景之后,在开发以及其他创造性工作中,只要注意培养这种应用意识,我们也能创造出这种“伎俩”来,只要善于思考,善于总结,创造性思维还是可以培养出来的.
【分析】
(1)第一种方法有数据溢出的缺陷
(2)可以通过数学上的图来分析这两种算法:
A+B即A与B的并集,然后再A-B即从这个并集中减去B的部分(重合部分算两份),剩下的就是A。从并集中减去A的部分,剩下的就是B。
A^B就是A和B的非交集的部分(我也不知道数学上怎么称呼),然后再异或上B,是什么意思呢?意思就是两者不相交的部分,从图上可以看出,就是A。
相关文章推荐
- 不用第三个变量,直接交换两个变量的值
- 不用第三个变量,直接交换两个变量的值
- 不用第三个变量,直接交换两个变量的值
- 不用第三个变量,直接交换两个变量的值
- 由“不用第三个变量,直接交换两个…
- 不用第三个变量交换两个变量的值
- 不用第三个变量,交换两个变量的值
- 不用第三个变量就能交换两个变量值的五个方法
- 剑指Offer(Java版):不用第三个变量就能交换两个变量值
- C:两个数直接交换,不用第三个临时变量
- 如果不引用第三个变量,就能直接交换两个变量的值?
- 两个变量交换数字 不用第三个变量的情况下 int a = 5,b = 6
- 不用第三个变量就能交换两个变量值的五个方法
- 不用第三个变量交换两个变量的值
- 不用第三个变量及其他函数等交换两个变量的值
- 不用第三个变量交换两个变量的值
- 不用新变量直接交换现有两个变理的值?
- php 不用第三个变量交换两个变量的值
- 关于交换两个变量的不用第三个变量 异或的问题
- 不用第三个变量就能交换两个变量值的五个方法