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

不用临时变量交换两个数

作者: 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

相关文章

  • C 语言实例12 - 交换两个数的值

    使用临时变量交换两个数的值 不使用临时变量交换两个数的值

  • 不用临时变量交换两个数

    原理分析:假定a = 5, b = 3,他们的二进制表示如下 第一步异或 a = a ^ b生成a和b的合集 第二...

  • 不用临时变量交换两个数的值

    假设有a=1、b=2,用js交换两个数的值,使a=2、b=1。很简单对吧?定义一个临时变量,交换一下a、b的值就好...

  • iOS面试必看经典试题分析

    不用临时变量怎么实现两个数据的交换? 方式一:加减法的运算方式求解new_b = a - b + b = a;ne...

  • 两个数交换不用其他变量,,,

    两个数交换不需要其他变量,任何语言都可以实现的转换方式,,, C#方式实现: 两种方式,一个逻辑,,个人还是觉得第...

  • 不使用临时变量,交换两个数

    大家好我是前端西瓜哥,今天我们看一道很经典的面试题。 假设我们有两个数 a 和 b,交换它们的值。这里不允许使用临...

  • 位运算符应用举例(一)

    1.两个数字交换 不借助临时变量,交换两个变量的值 2.求无符号整数二进制中1的个数 2.1 给定一个无符号整数变...

  • 8_3交换练习

    请编写一个算法,不用任何额外变量交换两个整数的值。 给定一个数组num,其中包含两个值,请不用任何额外变量交换这两...

  • 常见位运算的面试题

    1. 不用临时变量,交换两个整数? 一个数和另一个数异或两次得到的还是原来的数 例如: 2. 统计一个整数二进制中...

  • 如何不用临时变量实现两变量的值交换

    异或版本 实验: 加减法版本 或者这么写也可以, 乘除法版本 参考资料 如何理解「异或」的含义?C语言中位运算符异...

网友评论

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

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