你什么时候不用第三个变量交换两个数字?

时间:2014-07-23 21:15:57

标签: algorithm coding-style swap

我已经阅读了几个来源,讨论如何在不使用第三个变量的情况下交换两个数字。这些是最相关的一些:

我理解为什么在大多数情况下使用所描述的方法没有意义:代码变得混乱且难以阅读,并且通常比使用第三个“temp”变量的解决方案执行得更慢。但是,我发现的所有问题都没有讨论双变量方法在实践中的任何好处。他们是否有任何救赎品质或利益(历史或现代),或者它们仅作为晦涩的编程琐事有用吗?

2 个答案:

答案 0 :(得分:6)

此时这只是一个巧妙的伎俩。尽管你的编译器能够识别正常交换并对其进行适当优化(但不能保证它能够识别出奇怪的xor并对其进行适当优化),但速度方面是否有意义。

答案 1 :(得分:2)

对xor的另一个打击是,如果一个变量为另一个变量别名,则xor'ing它们将为零。由于您必须检查并处理此情况,因此您将需要额外的代码 - 可能使用第三个变量方法。

您还可以尝试添加和减去值...除了您必须检查并处理溢出,这将涉及更多代码(可能是第三个变量方法)。乘法和除法具有相同的缺陷,但更重要的是,在二进制中表示分数的精致快乐(所以这首先不起作用)。

编辑:D'哦,对不起线程的死灵法......如此陷入以下链接,我忘了检查日期。