不用第三方变量如何交换两个数的值
2017-04-23 19:59
387 查看
如果要交换两个变量的值,我们首先想到的就是定义一个第三方变量暂存其中一个变量的值:
如果我们不使用第三方变量怎么交换两个变量的值呢?
1.利用两数之和减去另一个数的方式:
这样也能成功交换两个数的值,但这种方法,如果两个数很大,可能会超出类型范围,造成数据丢失精度。所以不常用。
2.利用位运算 ^ (异或):
异或的特点是:一个数据a与另一个数据b做异或运算之后,变成了另外一个数c,再读取这个数据就不是原来的数据了,我们如果再拿这个数据c和数据b异或一次,这个数据又变回原来的数据a。
即:a^b^b=a; a^b^a=b
所以我们可以利用这个特点交换两个数据:
异或运算不会产生进位,所以不会造成数据损失,并且异或运算是二进制之间的运算,效率也比较高,但是这种交换方式阅读性差。所以还是定义第三方变量比较常用
如果我们不使用第三方变量怎么交换两个变量的值呢?
1.利用两数之和减去另一个数的方式:
这样也能成功交换两个数的值,但这种方法,如果两个数很大,可能会超出类型范围,造成数据丢失精度。所以不常用。
2.利用位运算 ^ (异或):
异或的特点是:一个数据a与另一个数据b做异或运算之后,变成了另外一个数c,再读取这个数据就不是原来的数据了,我们如果再拿这个数据c和数据b异或一次,这个数据又变回原来的数据a。
即:a^b^b=a; a^b^a=b
所以我们可以利用这个特点交换两个数据:
异或运算不会产生进位,所以不会造成数据损失,并且异或运算是二进制之间的运算,效率也比较高,但是这种交换方式阅读性差。所以还是定义第三方变量比较常用
相关文章推荐
- 如何不用第三个变量实现两个数的交换
- 不用第三方变量如何交换两个整形数
- 不用临时变量交换两个数的值
- 不用临时变量交换两个数的值
- Java不用临时变量temp将两个数交换(面试题)
- 不适用第三方变量,交换两个数
- 不用临时变量,实现两个数的交换
- 不用临时变量交换两个数的值
- c语言不用临时变量交换两个数程序分析
- (转载)不用临时变量交换两个数的值
- 不用临时变量实现两个数的交换
- 交换两个数不使用第三方变量
- 不用临时变量交换两个数的值
- 不用额外变量交换两个数的值
- 不用临时变量交换两个数的值(C实现)
- 交换两个数,不用第三方变量(异或运算)
- 不用临时变量交换两个数的值
- 不用第三方参数交换两个数的方法
- [笔试题]交换两个数不使用第三方变量 深入理解按位异或运算符
- 交换两个数不使用第三方变量=!!=深入理解按位异或运算符