A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

实现两个数据交换有很多种方法,最常用的是使用第三变量来实现,但是大家看下面的方法是不是很简单呢。。。
  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, 下载次数: 60)

QQ截图20150516163448.png

13 个回复

倒序浏览
呵呵,学了这么久都没发现优点惭愧
回复 使用道具 举报
简单是简单,但是你写进程序里,别的同事会搞蒙的,还是定义第三个变量比较合理
回复 使用道具 举报 2 0
一般没人会用这种方法吧
回复 使用道具 举报
确实很简单,LMJ也是这样说的
回复 使用道具 举报
a = a + b;
b = a - b;
a = a - b;
小数据直接加减也可以. 异或是对二进制数据进行操作, 对刚学C语言的人来说, 可能开始补码反码都迷糊, 要理解异或肯定很困惑. 如果不知道原理就用, 很容易用错
回复 使用道具 举报
cui0wei0 发表于 2015-5-16 21:40
a = a + b;
b = a - b;
a = a - b;

嗯嗯,这种方法也很不错,赞一个!  就注意一点就是a+b会不会溢出的问题
回复 使用道具 举报
学习了,,,,,,,,,,,,,,,,
回复 使用道具 举报
cogddo 中级黑马 2015-5-17 16:40:35
9#
实现有很多种方法,但是项目组里,团队开发里,都是用第三个变量转换的,可读性,没人愿意为了个交换功能去研究你的代码的,,,
a = a^b;
b = a^b;
a = a^b;
回复 使用道具 举报
Rdxer 中级黑马 2015-5-17 16:47:47
10#
最简单就是借用第三方变量
回复 使用道具 举报
mony 中级黑马 2015-5-17 22:04:34
11#
你确定吗?如果我是两个字符串类型,这种方法可以换?
回复 使用道具 举报
Dzlbp 中级黑马 2015-5-17 22:30:09
12#
这就是你理解的简单啊
回复 使用道具 举报
还有一个呢   int  a = 10,b = 12;a = b - a;b= b - a;a = b + a ;这是老师讲的  我应该没有记错
回复 使用道具 举报
简单的 复杂化了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马