JavaScript初级玩法(4)—两数交换的多种方法

说明

这里说的几种两数交换的方法,并不仅仅适用于JavaScript中,在其他语言中同样是适用的,重要的是思想,所以说,要以理解为目的,好在,这篇文章很好理解!!!

方法1 (声明第三变量)

代码

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
方法2 (求和交换)

代码

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;
方法3 (按位异或)

代码

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
方法4 (数组交换)

代码

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 (按位异或),这两个方法比较局限,只能换数字,如果变量不是数字,就不能用了。
总结一下上面所有方法的思路,交换两数,不是凭空就能换的,终究还是要依靠一下别的数,只是不用把这个数表现出来,不用再声明一个变量而已。
交换两数,如果大家还有什么有意思的方法,欢迎在评论区,分享出来。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值