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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毕业生 中级黑马   /  2014-7-14 21:07  /  1044 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

int a = 10;
int b = 20;
a = a^b;
b = b^a;
a = a^b;
自学好难 ,有些搞不懂,求会的讲解下原理!

评分

参与人数 1技术分 +2 收起 理由
Doraemon + 2

查看全部评分

4 个回复

倒序浏览
一个数跟自己异或,结果是0。
一个数跟0异或,结果是该数本身。
回复 使用道具 举报
本帖最后由 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的交换


评分

参与人数 1技术分 +2 收起 理由
Doraemon + 2

查看全部评分

回复 使用道具 举报 1 0
这个用到的原理是一个数跟另一个数异或两次得到的结果还是原来的数~
回复 使用道具 举报
fantacyleo 发表于 2014-7-14 21:27
^表示异或(XOR)。当且仅当a=b时,有a^b=0 。异或满足交换律和结合律:
交换律:a ^ b = b ^ a
结合律:( ...

很详细,也搞明白了!会第三变量 变量数值交换,出个这,有点蒙了。3Q。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马