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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王乐乐 中级黑马   /  2014-7-30 22:47  /  1434 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是交换两个数的代码,有没有大神给解释一下?

11 个回复

倒序浏览
回复 使用道具 举报
  1. class demo1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a=1,b=2;
  6.                 a=a^b;
  7.                 b=a^b;  //b=a^b^b
  8.                 a=a^b;  //a=a^b^a
  9.                 System.out.print("a="+a+"b"+b);
  10.         }
  11. }
复制代码
回复 使用道具 举报
fantacyleo 发表于 2014-7-30 22:49
http://bbs.itheima.com/forum.php?mod=viewthread&tid=129663&page=1#pid854231

谢谢指导!
回复 使用道具 举报

大哥,你复制一遍代码是什么意思?
回复 使用道具 举报
我自己敲得。。。。。
回复 使用道具 举报
D.reamJA 发表于 2014-7-31 23:08
我自己敲得。。。。。

能解释一下吗?
回复 使用道具 举报
王乐乐 发表于 2014-7-31 22:50
大哥,你复制一遍代码是什么意思?

我自己敲得,你什么意思!!??你怎么就看出我是复制的???
回复 使用道具 举报
D.reamJA 发表于 2014-7-31 23:08
我自己敲得。。。。。

我是说和我的写得一样,没解决问题呀!
回复 使用道具 举报
  1. class demo
  2. {
  3.   public static void main(String[] args)
  4.   {
  5.         int a=1,b=2;
  6.         a=a+b;
  7.         b=a-b; //b=a+b-b
  8.         a=a-b; //a=a+b-a
  9.         System.out.println("a="+a+"b="+b);
  10.        
  11.   }
  12. }

复制代码


换一个方式,和这个差不多,你把那三个交换式分开写,就懂这个意思了。
回复 使用道具 举报
D.reamJA 发表于 2014-7-31 23:16
换一个方式,和这个差不多,你把那三个交换式分开写,就懂这个意思了。 ...

哦!不好意思,看出来了,这种方法我会,也是很好的一个方法。
回复 使用道具 举报
用两个数相加的方法时,假如两个值都比较大,加一起很有可能会超过int的取值范围,不建议使用这种方法
编程时使用第三方变量的方法最好,方便阅读,也不容易出错     
int a,b,temp;
temp = a;
a  = b;
b = temp;

采用异或的方法时,你可以理解异或为取反, 即  1异或后 的结果是0,0异或的结果是1,那一个数异或一个数两次还是本身
a = a^b;
b = a^b;     //(a^b)^b    相当于    把a 的值给了b
a = a ^b;    // (a^b) ^a  相当于   把 b的值给了a
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马