你什么时候不用第三个变量交换两个数字?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你什么时候不用第三个变量交换两个数字?相关的知识,希望对你有一定的参考价值。
我已经阅读了几个来源,讨论如何在不使用第三个变量的情况下交换两个数字。以下是一些最相关的:
- How do you swap two integer variables without using any if conditions, casting, or additional variables?
- Potential Problem in "Swapping values of two variables without using a third variable"
- Swap two integers without using a third variable
- http://www.geeksforgeeks.org/swap-two-numbers-without-using-temporary-variable/
我理解为什么在大多数情况下使用所描述的方法没有意义:代码变得混乱且难以阅读,并且通常比使用第三个“临时”变量的解决方案执行得更慢。但是,我发现的所有问题都没有讨论双变量方法在实践中的任何好处。他们是否有任何救赎品质或利益(历史或现代),或者它们仅作为晦涩的编程琐事有用吗?
答案
在这一点上,它只是一个巧妙的技巧。速度方面,如果它有意义,虽然你的编译器将识别正常的交换并适当地优化它(但不能保证它会识别奇怪的xor
ing并适当地优化它)。
另一答案
对xor的另一个打击是,如果一个变量为另一个变量别名,则xor'ing它们将两个都归零。由于您必须检查并处理此情况,因此您将需要额外的代码 - 可能使用第三个变量方法。
您还可以尝试添加和减去值...除了您必须检查并处理溢出,这将涉及更多代码(可能是第三个变量方法)。乘法和除法具有相同的缺陷,但更重要的是,在二进制中表示分数的精致快乐(因此这首先不起作用)。
编辑:D'哦,对不起线程的死灵法......如此陷入以下链接,我忘了检查日期。
以上是关于你什么时候不用第三个变量交换两个数字?的主要内容,如果未能解决你的问题,请参考以下文章