不使用中间变量交换两个数
来源:互联网 发布:tensorflow reuse 编辑:程序博客网 时间:2024/05/16 11:04
inta = 1;
intb = 2;
a = a + b;
b = a - b;
a = a - b;
这个思路很巧妙,但也存在一定问题: 万一溢出了怎么办?
到目前为止,我们的答题思路是没错的,就是寻找另外一种数据存储的模式,用一个变量保存两条信息的集合,我们仍然需要采用这种模式解决这个问题,但原先的简单相加的模式是不行了,于是我们想到,集合两个整型数字,是否可以从其二进制表达方面来考虑?
我们可以使用位异或来存储集合信息。 用 1 和 0 来做简单的验证,看是否可以用异或的方式,存储信息的集合:
如果两个数是a = 1和b = 0,则:
集合 = 1
0 异或 集合 = 1
1 异或 集合 = 0
如果 a = 1 & b = 1
集合 = 0
1 异或 集合 = 1
如果 a = 0 & b = 0
集合 = 0
0 疑惑 集合 = 0
验证结果: 可以采用信息集合的方式存储
那么我们的交换代码可以变成:
inta = 10;
intb = 50;
a = a ^ b; // 构建集合
b = a ^ b; // 取出集合的另一个元素
a = a ^ b; // 取出集合的另一个元素
这种方式不用担心数据溢出,应该算是就地交换两个数的最佳解决方案了。
- 不使用中间变量交换两个数
- 不使用中间变量交换两个数
- 不使用中间变量交换两个数
- 不使用中间变量交换两个数
- 交换两个数 不使用中间变量
- 不使用中间变量交换两个数(Java版)
- java不使用中间变量交换两个数
- java不使用中间变量交换两个数
- 不使用中间变量实现两个数的交换
- c语言不使用中间变量交换两个数
- 不使用中间变量交换两个数(Java版)
- 简单算法--交换两个数不使用中间变量
- 交换两个数(不使用中间变量)
- 不使用中间变量,如何交换两个数
- 如何不使用中间变量交换两个数的值
- 【Java】不使用中间变量,如何交换两个数?
- 不使用中间变量交换两个数的值
- 不使用中间变量,交换两个数的值
- Arx开发中坐标转换问题
- Android常用单位
- 求100内的奇数的和
- JUnit的jar包和hamcrest的jar包关系
- asp显示图片信息
- 不使用中间变量交换两个数
- Problem with BAPI_PO_CREATE1: Delivery Date and PEINH
- 什么是QS认证?
- linux截图工具的使用
- 定位页面元素
- 一个跨浏览器事件检查的反思
- 10 个基于 JavaScript 的图表插件推荐
- WebClient in Windows Service
- C++静态成员的初始化问题,导致定义的静态成员 unresolved