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

问题描述 投票:4回答:2

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

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

algorithm coding-style swap
2个回答
6
投票

在这一点上,它只是一个巧妙的技巧。速度方面,如果它有意义,虽然你的编译器将识别正常的交换并适当地优化它(但不能保证它会识别奇怪的xoring并适当地优化它)。


2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.