版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/FE_dev/article/details/71419588
这里说的几种两数交换的方法,并不仅仅适用于JavaScript中,在其他语言中同样是适用的,重要的是思想,所以说,要以理解为目的,好在,这篇文章很好理解!!!
代码
var a=3;
var b=4;
var c;
c=a;
a=b;
b=c;
分析 交换两个数,我们最简单的办法就是,先找一个地方,把其中一个变量存起来,这样我们有三个变量,只要让他们转一圈,把各自的值,分别赋给另一个变量,值就交换了。
var a=3;
var b=4;
var c; // 声明第三变量
c=a; // a的值给了c,c是3
a=b; // b的值给了a,a是4
b=c; // c的值给了b,b是3
代码
var a=3;
var b=4;
a=a+b;
b=a-b;
a=a-b;
分析 这个方法不用声明第三变量,但是还是需要依靠一个数,来进行交换,我们理解上面的方法后,来看这个方法,会发现其实还是有些类似。
var a=3;
var b=4;
a=a+b;
//获得两数的和(7),赋值给a,这时候a=7
b=a-b;
//a-b,得到的就是最开始的a,(那个时候a的是3),然后赋值给b,此时b是3
a=a-b;
//因为上一步给b赋值为3了,所以这里a-b,得到的是最开始的b,(那个时候b是4),然后赋值给a,此时a是4
我们可以把,这个方法中的a+b换成c,也许更好理解
var a=3;
var b=4;
var c=a+b; // 获得两数的和
b=c-b; // 7-4=3 此时b=3
a=c-b; // 7-3=4,注意这里的b已经是3,a=4
上面是用和来交换的方法,如果只是交换数字,我们还可以用积,思路是一样的。
var a=3;
var b=4;
a=a*b;
b=a/b;
a=a/b;
代码
var a=3;
var b=4;
a=a^b;
b=a^b;
a=a^b;
分析 按位异或: 比较二进制数字,对应位,只有一个1的时候,结果才为1,否则就是0 简单理解就是先把每个十进制数,转换为二进制数字,然后比较二进制各个位置上的数字,只有一个1的时候,这个位置的结果就取1,否则就取0,最后转为十进制
二进制: 二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二” 如果不懂二进制可以参考http://baike.so.com/doc/1420585-1501617.html 当然,不懂其实也没关系,可以直接上网搜一个进制转换工具,只要能得到一个数的二进制就可以了
var a = 3;
var b = 5;
a = a^b; //6
a=3,3转二进制为 011
b=5,5转二进制为 101
011
101
================
110 转换为十进制为 6
b = a^b; //3
a=6,6转二进制为 110
b=5,5转二进制为 101
110
101
================
011 转换为十进制为 3
b = a^b; //5
a=6,6转二进制为 110
b=3,3转二进制为 011
110
011
================
101 转换为十进制为 5
代码
var a=3;
var b=4;
a=[b,b=a][0];
分析 这个方法,代码量是最少的了,我们来分析一下,为了更加容易理解,我们变换一下代码看看。
var a=3;
var b=4;
var arr=[b,a]; //声明一个数组,保存a,b的副本
a=arr[0]; //a = 副本b
b=arr[1]; //b = 副本a
上面这段代码应该是非常好理解了,我们可以看到,上面的代码中,我们是有4个数的,两两交换,便达到了我们的目的,而a=[b,b=a][0];
只是他的一种简写罢了。
方法2 (求和交换),方法3 (按位异或),这两个方法比较局限,只能换数字,如果变量不是数字,就不能用了。 总结一下上面所有方法的思路,交换两数,不是凭空就能换的,终究还是要依靠一下别的数,只是不用把这个数表现出来,不用再声明一个变量而已。 交换两数,如果大家还有什么有意思的方法,欢迎在评论区,分享出来。