黑马程序员技术交流社区

标题: 亦或的运算 [打印本页]

作者: xinchi    时间: 2015-9-21 22:25
标题: 亦或的运算
int a=2,b=6;
a=a^b;
b=a^b;
a=a^b;
System.out.println("a="+a+", b="+b);
结果是多少?为什么?
作者: pengwei1989    时间: 2015-9-21 22:37
结果是a=6,b=2
作者: 召唤吧Bymax    时间: 2015-9-21 22:40
这就是两个变量互换的第二种方式啊
作者: maxwell247    时间: 2015-9-21 22:50
这是典型的两数交换的算法。

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

为什么呢?  应为  a^b^b == a^(b^b)
作者: 往事如风555    时间: 2015-9-21 23:04
a=a^b;
b=a^b;
a=a^b;

这个相当于a、b互换,一个数a被同一个数b 按位异或 偶数次,结果还是这个数a
作者: 三川草民    时间: 2015-9-21 23:07
本帖最后由 三川草民 于 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的值。
作者: sharpCsu    时间: 2015-9-22 00:04
按照基本方法一步步推理




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