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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xinchi 中级黑马   /  2015-9-21 22:25  /  855 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a=2,b=6;
a=a^b;
b=a^b;
a=a^b;
System.out.println("a="+a+", b="+b);
结果是多少?为什么?

6 个回复

倒序浏览
结果是a=6,b=2
回复 使用道具 举报
这就是两个变量互换的第二种方式啊
回复 使用道具 举报
这是典型的两数交换的算法。

异或有一个特性。 如果 a 异或两次b,那么结果还是a。

为什么呢?  应为  a^b^b == a^(b^b)
回复 使用道具 举报
a=a^b;
b=a^b;
a=a^b;

这个相当于a、b互换,一个数a被同一个数b 按位异或 偶数次,结果还是这个数a
回复 使用道具 举报
本帖最后由 三川草民 于 2015-9-21 23:08 编辑

结果是a=6,b=2
这是因为:一个数据对另外一个数据两次异或就等于该数据本身
从第2步开始
b=a^b^b=a(把a=a^b代入)
第3步
a=a^b^a=b(把a=a^b代入,而此时b=a也代入)

该程序相当于交换a,b的值。
回复 使用道具 举报
按照基本方法一步步推理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马