黑马程序员技术交流社区

标题: 技术题 求讲解! [打印本页]

作者: 毕业生    时间: 2014-7-14 21:07
标题: 技术题 求讲解!
int a = 10;
int b = 20;
a = a^b;
b = b^a;
a = a^b;
自学好难 ,有些搞不懂,求会的讲解下原理!
作者: 黎志勇    时间: 2014-7-14 21:14
一个数跟自己异或,结果是0。
一个数跟0异或,结果是该数本身。
作者: fantacyleo    时间: 2014-7-14 21:27
本帖最后由 fantacyleo 于 2014-7-14 21:30 编辑

^表示异或(XOR)。当且仅当a=b时,有a^b=0 。异或满足交换律和结合律:
交换律:a ^ b = b ^ a
结合律:(a ^ b) ^ c = a ^ (b ^ c)

另外,在异或运算中,0类似加法中的0:加法中 a + 0 = a,异或中,a ^ 0 = a

好了,有上述知识准备就可以来看你的题目了:

a = a^b; // 这句没什么可说的

b = b^a;
由于前一句改变了a,因此这里变为:
b = b ^ (a ^ b)
   = b ^ (b ^ a) (交换律)
   = (b ^ b) ^ a (结合律)
   = a                 (b ^ b = 0, a ^ 0 = 0)

a = a^b;
由于前两句的执行效果,这句变成:
a = (a ^ b) ^ a
   = (b ^ a) ^ a (交换律)
   = b ^ (a ^ a) (结合律)
   = b                (a ^ a = 0, b ^ 0 = b)

至此,完成a和b的交换



作者: w306752855    时间: 2014-7-14 21:30
这个用到的原理是一个数跟另一个数异或两次得到的结果还是原来的数~
作者: 毕业生    时间: 2014-7-14 21:41
fantacyleo 发表于 2014-7-14 21:27
^表示异或(XOR)。当且仅当a=b时,有a^b=0 。异或满足交换律和结合律:
交换律:a ^ b = b ^ a
结合律:( ...

很详细,也搞明白了!会第三变量 变量数值交换,出个这,有点蒙了。3Q。。




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