不借用第三变量,互换两个变量

下面列出几种方法:

1)算术运算

1 int a,b;
2 a=10;b=12;
3 a=b-a; //a=2;b=12
4 b=b-a; //a=2;b=10
5 a=b+a; //a=12;b=10

它的原理是把a,b看作是数轴上的点,围绕两点间的距离来进行运算。

缺点:因为是int类型,有可能造成数据溢出。

 

2)指针地址操作

 1 if(a<b){
 2 a=(int*)(b-a);
 3 b=(int*)(b-(int(a)&0x0000ffff));
 4 a=(int*)(b+(int(a)&0x0000ffff));
 5 }
 6 else{
 7 b=(int*)(a-b);
 8 a=(int*)(a-(int(b)&0x0000ffff));
 9 b=(int*)(a+(int(b)&0x0000ffff));
10 }

 

3)位运算

1 int a=10,b=12; //a=1010^b=1100;
2 a=a^b; //a=0110^b=1100;
3 b=a^b; //a=0110^b=1010;
4 a=a^b; //a=1100=12;b=1010;

 

4)利用栈的先入后出实现

1 int exchange(int x,int y) { 
2      stack s; 
3      push(s,x); 
4      push(s,y); 
5      x=pop(s); 
6      y=pop(s); 
7 }

 

相关推荐:

如何在 Python 模块中安全使用主程序的循环变量

python模块具有独立作用域,无法直接访问导入它的主程序中的变量(如循环计数器i);正确做法是通过函数参数显式传递值,而非重复import。 python模块具有独立作用域,无法直接访问导入它的主程序中的变量(如循环计数器i);正确做法是通过函数参数显式传递值,而非重复import。 在Pytho...

如何在Python中通过解包赋值优化变量交换与赋值的执行速度?

Python解包赋值不提升执行速度,其核心价值在于增强可读性、安全性和语义清晰度;它通过结构断言避免手动索引错误,适用于多值返回、可变长解包及字典传参等场景。 Python中的解包赋值本身不会提升变量交换或赋值的“执行速度”,它和传统赋值在底层开销几乎一致;真正带来收益的是代码可读性、安全性与表达意...

Python 中 nonlocal 变量在递归中未按预期更新的根本原因解析

本文深入剖析递归函数中nonlocal变量更新失效的典型陷阱:当res+=recurse(i+1)(即右值直接参与赋值)时,res仅被最后一步覆盖为首个返回值;而正确写法需确保res的读取发生在递归“回溯”阶段,即其值已被深层调用更新之后。 本文深入剖析递归函数中`nonlocal`变量更新失效的典...

Python 中 nonlocal 变量在递归中未按预期更新的原因解析

本文深入剖析递归函数中使用nonlocal变量时,因赋值表达式求值顺序不同(l-valuevsr-value位置)导致结果异常的根本原因,并通过对比代码揭示执行时序与变量读写时机的关键影响。 本文深入剖析递归函数中使用nonlocal变量时,因赋值表达式求值顺序不同(l-valuevsr-value...