您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记27 交换两个数据swap

2017-11-02 16:39 417 查看

如何在不使用中间变量的情况下交换两个数据?

方法很多,不过需要通过多次的数值计算来完成交换,到现在知道的有下面三种:

(1)加减法。

a = a + b;

b = a - b;

a = a - b;


该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,例如对数据:

a = 3.123456

b = 1234567.000000


交换后各变量值变为:

a = 1234567.000000

b = 3.125000


很明显,原来a的值在交换给b的过程中发生了精度损失。

(2)乘除法。

a = a * b;

b = a / b;

a = a / b;


乘除法更像是加减法向乘除运算的映射,它与加减法类似:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。

可能经验上的某种直觉告诉我们:加减法和乘除法可能会溢出,而且乘除的溢出会特别严重。其实不然,采用这两种方法都不会溢出。以加减法为例,第一步的加运算可能会造成溢出,但它所造成的溢出会在后边的减运算中被溢出回来。

(3)异或法。

a ^= b;//a=a^b

b ^= a;//b=b^(a^b)=b^a^b=b^b^a=0^a=a

a ^= b;//a=(a^b)^a=a^b^a=a^a^b=0^b=b


异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

总结

不适用中间变量完成交换,那么就是时间换空间,就会多了计算时间,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: