设2个变量, a 为 151,b 为 251,交换它们的变量值。

临时变量交换法

最常用的是利用临时变量来交换:
下面是一个 Java 实例

int a = 151;
int b = 251;
int c;

c = a;
a = b;
b = c;

System.out.println("a = "+a+"\nb = "+b);

逻辑:创建一个临时变量 c 来存储 a 的值,a 先赋值 b,a 就等于了 b 的值。随后 b 只需要赋值 c 就得到 a 的值。
运行后结果:

a = 251
b = 151

此外,在 Python 中还有种特别方便的交换方法

a,b = b,a

它们的原理和结果都是相同的。Python 这种语法中的原理就是创建临时变量,并通过赋值来交换变量值。

加减交换法

如果变量是数字的类型,可以用到加减法交换。通过两个值之间进行加减法运算来达成交换结果。
下面是一个 Python 实例

a = 151
b = 251

a = a+b
b = a-b
a = a-b

print('a = ',a)
print('b = ',b)

逻辑:a首先和 b 相加,等于 402 然后 b 用 402 - b自身(251)即等于 151 然后赋值给 b。随后再使用 402 - a自身(151)即等于251 然后赋值给 a。

运行后结果:

a = 251
b = 151

异或交换法

我们知道计算机只认识 1 和 0,可以通过二进制异或来交换变量数值。
异或:相异时,为1。相同时为0
下面是一个 Python 实例

a = 151
b = 251

a ^= b
b ^= a
a ^= b

print('a = ',a)
print('b = ',b)

逻辑: a (151) 在二进制中表示 1001 0111,b(251)在二进制中表示 1111 1011。

先让 a 异或 b 也就是 a^b 得出 0110 1100(108),接着让 b (251) 异或 108 就得到 1011 0111(151)a 的值

接着 a(151) 再异或 108 ,此时就得到了 1111 1011(251)b 的值。

运行后结果:

a = 251
b = 151

在 C++ 中还可以有连写法

a ^= b ^= a ^= b
文章目录