黑马程序员技术交流社区

标题: 位运算交换连个数 [打印本页]

作者: 王乐乐    时间: 2014-7-30 22:47
标题: 位运算交换连个数
这是交换两个数的代码,有没有大神给解释一下?

作者: fantacyleo    时间: 2014-7-30 22:49
http://bbs.itheima.com/forum.php ... mp;page=1#pid854231
作者: D.reamJA    时间: 2014-7-31 07:55
  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. }
复制代码

作者: 王乐乐    时间: 2014-7-31 22:49
fantacyleo 发表于 2014-7-30 22:49
http://bbs.itheima.com/forum.php?mod=viewthread&tid=129663&page=1#pid854231

谢谢指导!
作者: 王乐乐    时间: 2014-7-31 22:50
D.reamJA 发表于 2014-7-31 07:55

大哥,你复制一遍代码是什么意思?

作者: D.reamJA    时间: 2014-7-31 23:08
我自己敲得。。。。。
作者: 王乐乐    时间: 2014-7-31 23:09
D.reamJA 发表于 2014-7-31 23:08
我自己敲得。。。。。

能解释一下吗?
作者: D.reamJA    时间: 2014-7-31 23:10
王乐乐 发表于 2014-7-31 22:50
大哥,你复制一遍代码是什么意思?

我自己敲得,你什么意思!!??你怎么就看出我是复制的???
作者: 王乐乐    时间: 2014-7-31 23:15
D.reamJA 发表于 2014-7-31 23:08
我自己敲得。。。。。

我是说和我的写得一样,没解决问题呀!
作者: D.reamJA    时间: 2014-7-31 23:16
  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. }

复制代码


换一个方式,和这个差不多,你把那三个交换式分开写,就懂这个意思了。
作者: 王乐乐    时间: 2014-7-31 23:19
D.reamJA 发表于 2014-7-31 23:16
换一个方式,和这个差不多,你把那三个交换式分开写,就懂这个意思了。 ...

哦!不好意思,看出来了,这种方法我会,也是很好的一个方法。
作者: ssy1939    时间: 2014-8-1 00:01
用两个数相加的方法时,假如两个值都比较大,加一起很有可能会超过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




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