前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript初级玩法(4)—两数交换的多种方法

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

作者头像
FEWY
发布2019-05-27 07:48:06
4880
发布2019-05-27 07:48:06
举报
文章被收录于专栏:FEWYFEWY

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/FE_dev/article/details/71419588

说明

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

方法1 (声明第三变量)

代码

代码语言:javascript
复制
var a=3;
var b=4;
var c;
c=a;
a=b;
b=c;

分析 交换两个数,我们最简单的办法就是,先找一个地方,把其中一个变量存起来,这样我们有三个变量,只要让他们转一圈,把各自的值,分别赋给另一个变量,值就交换了。

代码语言:javascript
复制
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 (求和交换)

代码

代码语言:javascript
复制
var a=3;
var b=4;
a=a+b;
b=a-b;
a=a-b;

分析 这个方法不用声明第三变量,但是还是需要依靠一个数,来进行交换,我们理解上面的方法后,来看这个方法,会发现其实还是有些类似。

代码语言:javascript
复制
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,也许更好理解

代码语言:javascript
复制
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

上面是用和来交换的方法,如果只是交换数字,我们还可以用积,思路是一样的。

代码语言:javascript
复制
var a=3;
var b=4;
a=a*b;
b=a/b;
a=a/b;
方法3 (按位异或)

代码

代码语言:javascript
复制
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 当然,不懂其实也没关系,可以直接上网搜一个进制转换工具,只要能得到一个数的二进制就可以了

代码语言:javascript
复制
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 (数组交换)

代码

代码语言:javascript
复制
var a=3;
var b=4;
a=[b,b=a][0];

分析 这个方法,代码量是最少的了,我们来分析一下,为了更加容易理解,我们变换一下代码看看。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年05月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 方法1 (声明第三变量)
  • 方法2 (求和交换)
  • 方法3 (按位异或)
  • 方法4 (数组交换)
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档