黑马程序员技术交流社区

标题: 交换两个变量的值 [打印本页]

作者: 宋红旺    时间: 2011-9-12 19:05
标题: 交换两个变量的值
看看大家能说出几种交换两个变量的值的方法(限制:不增加第三个变量的情况下)。
作者: 匿名    时间: 2011-9-12 19:06
沙发呀!这个我总结过:
菜鸟版:
            int temp = a;

            a = b;

            b = temp;
入门版:
           a = a + b;

           b = a -  b;

           a = a - b;
高手版:
          a  = a ^ b;

          b =  a ^ b;

          a  = a ^ b;
专家版:
         a = b + 0 * (b = a);
作者: 程钧杰    时间: 2011-9-12 19:15
面试已经被问道这个问题
可当时实在是菜鸟
最后一个理解有点困难
[ 本帖最后由 chengjj520 于 2011-09-13  09:32 编辑 ]
作者: 匿名    时间: 2011-9-12 20:41
貌似不增加变量并不能实现2个 变量交换数据
作者: 匿名    时间: 2011-9-13 16:13
呵呵,见识了。
作者: 匿名    时间: 2011-9-13 17:17
这个专家版  不错啊。。还是第一次见呢。。
不过 其实见过类似的,,
if ((a=b+1)>10).....    就是把 赋值 放在表达式 里
作者: 匿名    时间: 2011-9-13 19:50
见识了,哈哈。
作者: 匿名    时间: 2011-9-16 15:28
int   n,m;
n=n+m;
m=n-m;
n=n-m;
--------------------------
int n,m;
n=n^m;
m=n^m;
m=n^m;
--------------------
看老师视频学的,但实际中用的还是第三变量。
作者: 724681149    时间: 2011-10-15 15:16
楼顶上的回答的很不错~学习了
作者: 724681149    时间: 2011-10-16 14:46
楼上的专家版,很少见,我没有见过,不做评论。
我把你说的其他版本说说吧:
其中的菜鸟版,也是日常用的最多的。可读性也是最强的。
菜鸟版:
            int temp = a;
            a = b;
            b = temp;
其中的入门版,是存在有弊端的,当a,b都非常大时容易引发数据越界的危险。
入门版:
           a = a + b;
           b = a -  b;
           a = a - b;
其中的高手版,当项目非常在乎效率的时候可以用这种方法。这个方法就是早期的一种加密和解密的原型。它的弊端就是阅读性略差,菜鸟看不懂。
高手版:
          a  = a ^ b;
          b =  a ^ b;
          a  = a ^ b;


作者: 余志强    时间: 2011-10-16 17:15
本帖最后由 余志强 于 2011-10-16 17:16 编辑


长见识了




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