黑马程序员技术交流社区

标题: 交换整形变量值,不用第三方变量 [打印本页]

作者: 周易    时间: 2014-8-11 16:51
标题: 交换整形变量值,不用第三方变量
a=5,b=10;交换后使得a=10,b=5.通过第三方变量很容易理解。不使用第三方变量来交换变量的值,通过如下方法来实现,但是还未理解这样的方法,求指点。。。。
a = b - a;
b = b - a;
a = b + a;
作者: cjfire    时间: 2014-8-11 17:12
首先,找一个变量(这里是a)记录他俩的差值,然后用b来还原a,再用a来还原b
作者: 周易    时间: 2014-8-11 17:29
cjfire 发表于 2014-8-11 17:12
首先,找一个变量(这里是a)记录他俩的差值,然后用b来还原a,再用a来还原b ...

还是没懂  能具体说说吗
作者: 张小楼    时间: 2014-8-11 17:45
你这个题目打错了吧第一行应该是a=a+b吧。
就像上面说的利用差值,还有一种方法是利用异或
a=a^b;
b=a^b;
a=a^b;
这样也能达到不利用第三方变量互换的目的
作者: 朱亚男    时间: 2014-8-11 18:25
如果a=4,b=10;第一步差值a等于6,第二步b减去差值a等于4就是a的原值再赋予b,这样b就完事了;第三步,这时候b是原先a的值4再加上差值a(6)等于10再赋给a,完事
作者: cjfire    时间: 2014-8-11 21:17
周易 发表于 2014-8-11 17:29
还是没懂  能具体说说吗

好,具体点。比如你列的算式,
首先,a记录了a和b的差值,对吧。
你知道了a和b的差值,知道b的值,是不是可以算出原来的a的值呢?而第二部你把算出的原来的a的值给了b。
现在,你手上有原来a的值,你需要做的是得到原来b的值,然后赋值给a
于是,你通过他们的差值和原来的a值(现在已经赋值的b)来还原原来的b值,并复制给a。
听起来好像绕口令,如果反应不过来,就用笔写写,会好些。
作者: 周易    时间: 2014-8-11 21:43
cjfire 发表于 2014-8-11 21:17
好,具体点。比如你列的算式,
首先,a记录了a和b的差值,对吧。
你知道了a和b的差值,知道b的值,是不是 ...

谢谢 !一口读完了!明白点了:victory:
作者: 梧桐树下    时间: 2014-8-11 23:32
这个,是对的,
作者: 山涧小草    时间: 2014-8-12 01:20
顺便复习了一遍
作者: 耀眼的小男人    时间: 2014-8-12 09:02
赞一个!!
作者: 从今以后    时间: 2014-8-12 13:13
谢谢楼上解答,理解多了
作者: 王振宇351x    时间: 2014-8-22 12:13
a = b - a;    //  a1 = b - a;
b = b - a;   //   b1 = b - a1 = b - (b - a) = a;
a = b + a;  //   a2 = b1 + a1 = a + (b -a) = b;
所以,ab互换了.               




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2