swap(int& a, int& b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
原理分析:
假定a = 5, b = 3,他们的二进制表示如下
0000 0101 a
0000 0011 b
-
第一步异或 a = a ^ b
生成a和b的合集
0000 0101 a
0000 0011 b
#经过异或得到合集
0000 0110 a
-
第二步异或 b = a ^ b
再次异或,用原始数据b从合集从取出a赋值给b
0000 0110 合集a
0000 0011 b
#再次经过异或得到合集
0000 0101 得到合集中的存放的a赋值给b
-
第三步异或 a = a ^ b
第三次异或,用新的b(这时候已经是初始数据的a)从合集中从取出b赋值给a
0000 0110 合集a
0000 0101 新b
#第三次异或
0000 0011 得到合集中存放b的赋值给a
网友评论