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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯狂程序 中级黑马   /  2013-3-21 10:58  /  1136 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我知道用临时变量可以进行数据互换,请问如何用^进行数据换?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

正序浏览
声明:以下内容引自borefo的专栏http://blog.csdn.net/borefo/article/details/4622288
在borefo的博客里对这个问题做了精彩深入的回答,在此向他表示敬意!

大家都知道,假如有a,b两个整型数,我们可以用

a^=b;
b^=a;
a^=b;

来交换a,b的值,在这里我说说其中的原理:
^ 在 C 里面是按位异或操作符,相同的话异或的结果就是 0,不同的话就是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:

a = 0101   (5 的二进制表示)
b = 1100   (12 的二进制表示)
    ----
c = 1001   (结果为 9)

可以看出 c 中是 1 的部分就是 a 和 b 二进制表示对应位不同的部分,0 则是相同的部分。

牢记以下两条原则:
任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)

因为 c 中是 1 的部分表示 a 和 b 中按位不同的位,0 表示 a 和 b 中按位相同的位,那么 a 同 c 异或的结果就是 a 中与 b 不同的位发生变化,二进制数每位只有两种状态,所以 a 变成了 b:
a = 0101
c = 1001
    ----
b = 1100


同样, b 与 c 异或结果就变成了 a:
b = 1100
c = 1001
    ----
a = 0101

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
这个后期虽然用得少,但是还是需要理解.

逻辑异或运算符 ^
如果:              第一个条件    第二个条件     结果
                true            true                     false
                false           true              true
                true           false              true
                false           false             false

还有一个要注意的就是像一楼说的,如果 x 异或两次也就是它本身了.


希望能够帮到你.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
  1. /* ① */
  2. class Test
  3. {
  4. public static void main (String [] args )
  5. {
  6. int a=3;
  7. int b=7;
  8. a=a+b;
  9. b=a-b;
  10. a=a-b;
  11. System.out.println("a="+a+",b="+b);
  12. }
  13. }

  14. /* ② */
  15. class Test
  16. {
  17. public static void main (String [] args )
  18. {
  19. int a=3;
  20. int b=7;
  21. a=a^b;
  22. b=a^b;
  23. a=a^b;
  24. System.out.println("a="+a+",b="+b);
  25. }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
记得及时处理帖子哦,继续追问,或将分类改成【已解决】~
回复 使用道具 举报
这个很经典啊!是异或,原理是如果x异或y,再次异或y,结果等于x

array[y] = array[y]^array[x];
array[x] = array[y]^array[x];
array[y] = array[y]^array[x];

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马