Back to Blog

不用第三个变量,直接交换两个变量的值

代码解读

  1. a=a+b;
    ab 的和暂存到 a 中。此时 a = a_original + b_original

  2. b=a-b;
    用新的 a 减去原来的 b,得到原来的 a,于是 b 变为 a_original

  3. a=a-b;
    再用新的 a(仍是 a_original + b_original)减去新的 b(已经是 a_original),得到 b_original,于是 a 变为 b_original

执行完毕后,ab 的值已完成互换。

适用范围与优势

  • 可读性强:逻辑顺序直观,易于理解,尤其适合初学者或代码审查时快速定位。
  • 无需位运算:对所有整数类型(包括有符号数)均适用,只要不出现溢出。

潜在风险

  • 整数溢出:若 ab 的和超过目标数据类型的表示范围,会导致溢出,产生错误结果。例如在 32 位有符号整数上,a=2^31-1b=1a+b 会溢出为负数。
  • 浮点数不适用:加减法交换依赖精确的加法与减法,浮点数的舍入误差会破坏交换过程。

方法二:异或(XOR)交换