W
e
l
c
o
m
e
: )

交换两个变量

1 最标准、最推荐:临时变量法(所有语言通用)

temp = a
a = b
b = temp
  • 优点:易懂、安全、无坑、速度最快(编译器会优化)
  • 适用:所有场景、所有语言、所有类型

2 加减法(不使用临时变量)

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

原理:

  • 第一步把和存在 a 里
  • 第二步用和减原来的 b → 得到原来的 a
  • 第三步用和减新 b → 得到原来的 b

缺点:

  • 可能数值溢出(Python 不存在整数溢出,C 语言等可能会出现)
  • 只能用于数字,不能用于浮点数/对象

3 乘除法(几乎不用,仅面试题)

a = a * b
b = a / b
a = a / b

缺点非常多:

  • 容易溢出
  • 不能有 0
  • 不能负数/浮点数
  • 速度慢

4 异或(几乎不用,仅面试题)

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

日常业务开发(Java / Python / JS / C++ 工程):

  • 可读性极差,别人看不懂你在干嘛
  • 维护成本高,出 bug 很难定位
  • 编译器本身会优化普通交换,速度并不会更快

5 解构赋值/元组交换(现代语言专属,最优雅)

Python/JS/Go 等都支持:

a, b = b, a
[a, b] = [b, a];
a, b = b, a
  • 本质是语法糖,底层还是临时变量
  • 代码极简洁,实际开发首选

6 指针/内存操作(C/C++ 底层)

利用内存地址直接交换:

void swap(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}

这是 C 语言最标准的交换函数。

7 栈操作(汇编/底层思路)

利用 push/pop 交换:

push a
push b
pop  a
pop  b

工程里几乎不用。

8 一行表达式交换(C 系炫技)

a ^= b ^= a ^= b;

和异或原理一样,但行为依赖编译器,可能 undefined behavior,不建议用。

9 快速总结(最好记版本)

  • 工程开发:临时变量解构赋值
  • 面试炫技:异或、加减法
  • 底层/嵌入式:指针、汇编
posted @ 2026-04-17 17:15  挖掘鱼  阅读(16)  评论(0)    收藏  举报