不用临时变量交换两个数

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容