黑马程序员技术交流社区
标题:
用异或进行两数值互换位置的疑问?
[打印本页]
作者:
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^20
m=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