黑马程序员技术交流社区

标题: 实现两个数据交换最简单的方法 [打印本页]

作者: 卖报的小画家    时间: 2015-5-16 16:36
标题: 实现两个数据交换最简单的方法
实现两个数据交换有很多种方法,最常用的是使用第三变量来实现,但是大家看下面的方法是不是很简单呢。。。
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int a=10;
  5.         int b=20;
  6.         printf("原始数据为: a=%d,b=%d\n",a,b);
  7.         a=a^b;                                        //a和b异或后的值赋给a
  8.         b=a^b;                                        //a和b异或后的值赋给b
  9.         a=a^b;                                        //a和b异或后的值赋给a
  10.         printf("交换后的数据为: a=%d,b=%d\n",a,b);
  11.         return 0;
  12. }
复制代码

至于原理大家自己去分析,都是基础知识,加入了位运算后是不是简单了很多。。

QQ截图20150516163448.png (11.62 KB, 下载次数: 57)

QQ截图20150516163448.png

作者: 15578797612    时间: 2015-5-16 16:39
呵呵,学了这么久都没发现优点惭愧
作者: ios专用    时间: 2015-5-16 20:55
简单是简单,但是你写进程序里,别的同事会搞蒙的,还是定义第三个变量比较合理
作者: wws    时间: 2015-5-16 21:10
一般没人会用这种方法吧

作者: 等风继续吹    时间: 2015-5-16 21:18
确实很简单,LMJ也是这样说的
作者: cui0wei0    时间: 2015-5-16 21:40
a = a + b;
b = a - b;
a = a - b;
小数据直接加减也可以. 异或是对二进制数据进行操作, 对刚学C语言的人来说, 可能开始补码反码都迷糊, 要理解异或肯定很困惑. 如果不知道原理就用, 很容易用错
作者: 卖报的小画家    时间: 2015-5-17 11:30
cui0wei0 发表于 2015-5-16 21:40
a = a + b;
b = a - b;
a = a - b;

嗯嗯,这种方法也很不错,赞一个!  就注意一点就是a+b会不会溢出的问题
作者: 碧空海    时间: 2015-5-17 11:41
学习了,,,,,,,,,,,,,,,,
作者: cogddo    时间: 2015-5-17 16:40
实现有很多种方法,但是项目组里,团队开发里,都是用第三个变量转换的,可读性,没人愿意为了个交换功能去研究你的代码的,,,
a = a^b;
b = a^b;
a = a^b;
作者: Rdxer    时间: 2015-5-17 16:47
最简单就是借用第三方变量
作者: mony    时间: 2015-5-17 22:04
你确定吗?如果我是两个字符串类型,这种方法可以换?
作者: Dzlbp    时间: 2015-5-17 22:30
这就是你理解的简单啊
作者: 尹世伟    时间: 2015-5-18 22:11
还有一个呢   int  a = 10,b = 12;a = b - a;b= b - a;a = b + a ;这是老师讲的  我应该没有记错
作者: lyricdon    时间: 2015-5-18 22:12
简单的 复杂化了




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