关于两个变量不使用临时变量进行值交换

最近,由于工作需要重温了一下数据结构与算法分析。针对“两个变量不使用临时变量进行值交换”这个问题,进行了一定的分析与研究。

首先,需要确定的是这个问题的应用条件。

从数据类型的角度可以分为相同数据类型和不同数据类型变量的值交换。这里的数据类型不包括结构体,类,枚举及联合体等复合类型,应该局限在内部数据类型。

1. 对于相同数据类型的情况,我们希望如下情况:

Type1 a= Val1;

Type1 b= Val2;

swap(&a, &b);

在交换之后有:a = Val2,b = Val1。

2. 对于不同数据类型的情况,我们希望如下情况:

Type1 a= Val1;

Type2 b= Val2;

swap(&a, &b);

在交换之后有:a = (type1)Val2,b = (type2)Val1。

但对于不同数据类型又分为同字长和非同字长两种情况,显然非同字长的变量交换会出现数据截断的情况,交换也就变得毫无意义。同字长情况下,对于整型与非整型交换依然会存在数据截断的情况,即便是同字长整型又分为有符号和无符号,二进制数据是可以实现交换的,但会存在某个类型溢出的情况,使交换也变得无意义。

综上:这两个变量应该是相同的数据类型,否则进行值的交换就会变得毫无意义或者意义不大。

其次,解决这个问题的方法有两种。

1. 针对同类型的整型及浮点型数据都适用的为:

x = x + y;

y = x - y;

x = x - y;

2. 只对同类型的整型数据适用的为:

x = x ^ y;

y = x ^ y;

x = x ^ y;

综上,以上两种方法都不会因数据溢出产生错误。第二种方法由于异或运算“^”支持整型运算,所以不适用于浮点型,因为编译器会报错。第二种方法在数据结构的指针操作方面有着存储空间优势。

最后,这个问题的深入探讨坛子里有几个帖子大家可以去查阅,问题真正的解法可能有多种多样,本篇结论纯属一家之言,希望对大家有帮助,如果觉得满纸荒唐言,只当博君一笑尔!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值