如何在程式中不使用暂存变数交换两个变数(适用于 Java 与 C/C++ 等语言)
这里说明如何在程式中不使用暂存变数(temporary variable)交换两个变数,这个问题也是面试时常问的问题。
在 C/C++ 与 Java 等程式中,如果要将两个变数所储存的值交换,最简单的方式就是使用一个暂存变数,例如若要将 a 与 b 两个变数交换,则可使用:
b = tmp其中 tmp 就是一个暂存变数,而这样的方式也是最简单、最直觉会想到的方法。但这里会多使用到一个暂存变数,是否有办法不要使用额外的 tmp 变数,就将 a 与 b 交换呢?这个问题是许多程式设计面试时会问到的问题,以下有三种解决方法。
这三种方式作用都相同,但是第二种与第三种都可能会有溢位(overflow)的问题,所以**的解法是使用第一种 XOR 运算。
使用 XOR 运算的方式来交换两个变数,直接从表面上看不是很好理解,我们可以使用一些简单的数学运算来解释,为了避免变数混淆,首先将 XOR 的三条运算改写为: