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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

int x=6;
int y=8;
x=x^y;
y=x^y;
x=x^y;
最后一个^怎么就得到了y的值了呢

4 个回复

正序浏览
x=x^y;
y=x^y;//此时x=x^y,所以有y=(x^y)^y=x
x=x^y;//此时y的值为x,而x的值为x^y,所以有x=(x^y)^x
回复 使用道具 举报
本帖最后由 Quasimodo 于 2014-10-12 22:36 编辑

这个我们可以拆开来看
首先我们知道一个数异或同一个数两次就等于他本身,好接下来看
第一个:n=n^m  //为了方便下面的解释,我们把式子左边的n标成n2,右边的n成n1,m标成m1。就变成n2=n1^m1
第二个:m=n^m   //  这里再把左边的m标成m2,那么就相当于  m2=n2^m1。 把上面的带下来就等价于m2=(n1^m1)^m1。 运行结果当然是m2=n1
第三个: n=n^m   //  同理这个式子相当于n3=n2^m2  ,把第一第二个的结果带下来就等价于n=(n1^m1)^n1。 运行结果当然是m1了

最后的结果就是m2=n1  ;n3=m1;   把我们的数字标识去掉就得到结果了   代码结束自此n m实现互换
回复 使用道具 举报
本帖最后由 LL.t 于 2014-10-12 22:19 编辑

^是位运算符  意思是按位异或 即两位数相同则为0 否则为1
6表示为二进制就是 0110
8表示为二进制就是 1000
6^8 的结果就是      1110

然后在异或8就相当于6^8^8  ==( 6^0) ==6即 0110
                                                                            ^  1000
                                                                            ^  1000
                                                                            =  0110  

然后在异或6 就相当于6^8^6 == (0^8) ==8

回复 使用道具 举报
x:6====0110
y:8====1000
x=x^y==1110
y=x^y==1110^1000=0110=6
x=x^y==1110^0110=1000=8

异或就是当两个二进制相等时为0,其它为1.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马