黑马程序员技术交流社区

标题: 关于置换2个变量的值的问题 简单分析 [打印本页]

作者: jw在路途    时间: 2014-8-10 19:50
标题: 关于置换2个变量的值的问题 简单分析
在上基础班的时候 对于这块内容还是理解的比较透彻,不明白的同学可以没事看看,明白的朋友可以指教推荐。
谢谢光临~
下面是个人理解的4种方式:
方式1(通过创建第三方变量来交换两数之值)
int a=10;
int b=20;设置一个第三方变量 int temp;
int temp=a; //把 a 赋值给temp;
int a=b;  // 把 b 赋值给a;
int b=temp; //把 temp中获取的a值 赋值  给 b  
这样就成功转换 a,b两值。

方式2(通过异或的原理)
方式2//
a=a^b;  //这里吧a^b的值 复制给了 a,
b=a^b;  //a^b=a^b^b=a;   解释下:( 因为根据异或2次同一个数等于它本身的原理)这里的a指(a^b),
a=a^b; //a^b=a^b^a=b;   解释:看上一步骤,这里的b已经被上面的a赋值了,所以a^b  也就可以理解为 a^a,参照第一步,a之前被 a^b赋值。 所以结果就是 a^ (a^b) ==b; 这样通过异或就完成了不用第三方转换
    根据原理(一个数异或2次同一个数等于它本身;

方式3(通过加减运算)
方式3//
给一个
int a=10;
int b=20;

a=a+b;  //a=30
b=a-b;  // b=10
a=a-b;   // a=30-10=20;
通过a,b加减运算,不需要第三方变量  可完成转换   


方式4(一步到位)
方式4//
同样给两个变量
int a=10;
int b=20;

a=(a+b)-(b=a);  //只需要一步 即可转换a,b 的值
分析:
(b=a),指把 a赋值给b,首先一步转换  
(a+b),值两数的和,
(a+b)-(b=a),指两数之和 减去 a (这里的a 是因为上面 b被a 赋值了) ,  结果就是b

转换成功~~~   :):):)


作者: 月夜小楠    时间: 2014-8-10 19:58
赞一个!
作者: 790324255a    时间: 2014-8-10 20:23
呵呵 学习了 感谢分享
作者: lcycr    时间: 2014-8-10 20:28
表示赞,也来学习一下
作者: jw在路途    时间: 2014-8-10 20:58
lcycr 发表于 2014-8-10 20:28
表示赞,也来学习一下

客气客气,谢谢~
作者: liang926    时间: 2014-8-10 21:01
总结的不错!赞一个!
作者: jw在路途    时间: 2014-8-10 21:05
790324255a 发表于 2014-8-10 20:23
呵呵 学习了 感谢分享

不客气,应该的~:)
作者: jw在路途    时间: 2014-8-10 21:09
月夜小楠 发表于 2014-8-10 19:58
赞一个!

多谢~欢迎
作者: 酋长第一    时间: 2014-8-10 21:22
共同进步,总结的很精辟
作者: 地狱天堂    时间: 2014-8-10 21:55
不错,不错




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