美文网首页
不用临时变量交换两个数

不用临时变量交换两个数

作者: yunie | 来源:发表于2019-03-30 09:47 被阅读0次
    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
    

    相关文章

      网友评论

          本文标题:不用临时变量交换两个数

          本文链接:https://www.haomeiwen.com/subject/vqxjbqtx.html