本文总结了数值交换的三种方法,如下(均以a、b为例):
普通方法:
这个方法耳熟能详了属于是,我就不多说了,直接贴代码吧。
int tmp = a;
a = b;
b = tmp;
相加寄存器:
将 sum = a + b 的值暂时寄存到a变量上,已知 a = sum - b,所以可以将a值放置到b上,又知 b = sum - a,所以可以将b值放置到a,由此实现a,b的交换。该方法如果 a + b 大于整形的最大值,则可能会数据溢出。
a = a + b;
b = a - b;
a = a - b;
变化过程:
执行语句 | a | b |
---|---|---|
a = a + b | a + b | b |
b = a - b | a + b | (a + b) - b = a |
a = a - b | (a + b) - a = b | a |
位运算:
这里有个小知识点:相同的数异或为0,0与任何数异或为该数本身。
a = a ^ b;
b = a ^ b;
a = a ^ b;
变化过程:
执行语句 | a | b |
---|---|---|
a = a ^ b | a ^ b | b |
b = a ^ b | a ^ b | (a ^ b) ^ b = a |
a = a ^ b | (a ^ b) ^ a = b | a |