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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你什么时候不用第三个变量交换两个数字?相关的知识,希望对你有一定的参考价值。

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

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

答案

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

另一答案

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

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

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

以上是关于你什么时候不用第三个变量交换两个数字?的主要内容,如果未能解决你的问题,请参考以下文章

PHP不用第三变量交换2个变量的值的解决方法

php不用第三个变量,交换两个数的值

不使用第三个变量交换两个数字

交换两个变量的值(不使用第三个变量)

只用两个变量,不借助第三个变量来交换值

交换两个数的值,不适用第三个变量