黑马程序员技术交流社区

标题: 两个数不用第三个变量完成交换 [打印本页]

作者: 施天宇    时间: 2016-7-22 16:51
标题: 两个数不用第三个变量完成交换
int a=10;
int b = 20;
int a =a + b;
int b = a-b;
int a =a -b;

作者: cat73    时间: 2016-7-22 17:02
本帖最后由 cat73 于 2016-7-22 22:17 编辑

这种做法的效率是比用中间变量的方法低的。。。
而且比较违反常识的是,这种方法占用内存跟临时变量法比没有任何优势,一模一样多。


作者: 觅离    时间: 2016-7-22 22:10
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
作者: frozentears    时间: 2016-7-22 22:21
您这种方法有可能会超出int类型范围,建议用异或运算符完成.原理是:
一个数据对另一个数据位异或两次,该数本身不变。举例说说明一下:
  1. int a=1;
  2. int b=2;
  3. x = x ^ y;
  4. y = x ^ y;
  5. x = x ^ y;
  6. System.out.println("x = " + x + ",y = " + y);
复制代码


作者: frozentears    时间: 2016-7-22 22:23
楼上写错了  两个变量是x和y
作者: qetu001212    时间: 2016-7-22 22:56
默默的看了一下,都是我发过的~~~然后被批的我都不敢见人了~~~
作者: 生牛排    时间: 2016-7-22 23:03
一般会用^(异或运算符)来实现,而且一般面试题会这么问
作者: 李铮    时间: 2016-7-22 23:54
666666虽然有点小瑕疵  但是依然6




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