黑马程序员技术交流社区

标题: 求大神帮我讲解一下异或这个问题,谢谢! [打印本页]

作者: 李恒杰    时间: 2014-12-26 18:12
标题: 求大神帮我讲解一下异或这个问题,谢谢!
今天在看毕老师的视频,由于没有基础,自学,在异或这个例题上有点迷糊,大神给讲解一下,谢谢!
原题:
n=3,m=8,需求:让n=8,m=3.
代码:
int n=3,m=8;
n=n^m;
m=n^m;
n=n^m;
最后一句,我不懂,哪位大神给我讲解一下,谢谢啦!
作者: 提米特    时间: 2014-12-26 18:31
本帖最后由 提米特 于 2014-12-26 18:34 编辑

这个就是实现两个变量的值交换的方法:
int n=3,m=8;
n=n^m;     此时:n=3^8  
m=n^m;    此时:m=3^8^8=3 相当于把最初n的3赋给了m
n=n^m;     此时:n=3^8^3=8^3^3=8   实现了把m的值赋给n
作者: 李恒杰    时间: 2014-12-26 18:39
提米特 发表于 2014-12-26 18:31
这个就是实现两个变量的值交换的方法:
int n=3,m=8;
n=n^m;     此时:n=3^8  

第三步:3^8^3=8^3^3数字的位置变化不影响结果,是吗?

作者: duluhua    时间: 2014-12-26 19:39
int n=3,int m=8;
二进制:3=0011   8=1000
计算过程:
n=n^m;     
           0 0 1 1
        ^ 1 0 0 0
       -------------
n  =     1 0 1 1            m = 1000

m=n^m;   
        1 0 1 1
     ^ 1 0 0 0
-----------------
m=   0 0 1 1      n =1011     此时:     m=3     

n=n^m;
           1 0 1 1
        ^ 0 0 1 1
--------------------------
n =      1 0 0 0      此时   n=8

通过此过程,m  n 就交换了过程
作者: 李恒杰    时间: 2014-12-27 20:30
duluhua 发表于 2014-12-26 19:39
int n=3,int m=8;
二进制:3=0011   8=1000
计算过程:

谢谢,过程很详细,太感谢啦!




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