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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在对两个两个变量的数据进行互换,不需要第三方变量时(例如:a=3,b=5,变成:a=5,b=3),我看到有一种方式是这样的:
a = a ^ b;
b = a ^ b;
a = a ^ b;
但是据我所知“^”是异或运算符,其作用是比较两个数值是否相同,相同为false,不同则为true。
既然异或的结果是boolean型的值,那最终又怎么会完成两个int型数值的交换的呢?求大神解释下!

6 个回复

倒序浏览
不错,学习学习
回复 使用道具 举报
一个数异或另一个数两次,还是原数        第一次异或a=a^b     第二次b=a^b 即(a^b^b) =a      a=a^b这个b已经是a了  即(a^b^a)
回复 使用道具 举报
我帮你完善下:
但是据我所知“^”是异或运算符,其作用是比较两个数值是否相同,相同为false,不同则为true。
这些都对,
不过有个前提 异或的运算对象是二进制  例如 6=6^2^2
    110  =6
^  010  =2
---------------------
    100  =4
^  010  =2
---------------------
    110  =6
:lol 这样明白了吧
回复 使用道具 举报
可以这样:a=a+b;b=a-b;a=a-b
回复 使用道具 举报
微凉的暮色 发表于 2015-5-27 00:29
我帮你完善下:
但是据我所知“^”是异或运算符,其作用是比较两个数值是否相同,相同为false,不同则为true ...

哦,原来是这样的,一下子就忽然明白了,谢谢啦~
回复 使用道具 举报
你还没有看到问题的本质,这个是操作数据的,返回的结果是相应的数值,不是什么boolean类型数据!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马