黑马程序员技术交流社区

标题: 用异或进行两数值互换位置的疑问? [打印本页]

作者: wkz_crystal    时间: 2015-3-14 00:58
标题: 用异或进行两数值互换位置的疑问?
例如:
交换数据n和m
交换的核心代码部分怎样理解:想了很久没有领悟到呀……急……
n=n^m;
m=n^m;
n=n^m;
这时候就已经交换了,可是没有理解到,想不通!!求具体的思想……

作者: ㏒假™面具    时间: 2015-3-14 04:20
举个例子来讲解这三句话  
int n = 10 ; int m = 20
n=n^m;这里右边参与运算的  n = 10   m = 20
运算结果    n = 10^20m=n^m;
这里的右边参与运算的n = 10^20   m=20
运算结果  m = 10^20^20 = 10
n=n^m;   
这里参与运算 n = 10^20    m = 10^20^20 =10
运算结果  n = 10^20^10 = 20






作者: 2119391569    时间: 2015-3-14 06:17
一个数异或同一个数两次,结果还是那个数。
int   m=3,n=8;
n=n^m;//8^3
m=n^m;//(8^3)3
n=n^m;//在拿的m就是上面得到的m的值为8,n的值是8^3,所以(8^3)8.
结合代码好好理解一下就OK了!当时这里我也想了好久。
作者: 健健    时间: 2015-3-14 12:26
是的,一个数异或同一个数两次,结果还是那个数。
最好拿具体的数值来帮忙理解
作者: wkz_crystal    时间: 2015-3-14 13:49
非常感谢你们,结合你们的举例思想,终于想通了,万分感谢!
之前我是主要是没有想通第三个表达式!呵呵
int   m=3,n=8;
n=n^m;//8^3
m=n^m;//(8^3)3 结果就是m=n
n=n^m;  我想成:n = n^(n^m),结果为:n=m,又把m值赋值回去了,那就相当于没有完成交换,呵呵……现在一起都明白了,谢谢大家……





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