交换两个变量的值(四种方法)_不使用中间变量

方法一:中间变量

要把两个杯子里的水互换, 那么只需要找第三个杯子临时存放一下这两个杯子其中一个,

用C语言表示:

// 定义两个初始值
int a = 10;
int b = 20;
//交换
int temp = a;
a = b;
b = temp;

那么, 有没有不需要中间变量就能交换两个数的方式呢?

方法二:加减运算

// 定义两个初始值
int a = 10;
int b = 12;
// 交换两个值
a = a + b;
b = a - b;
a = a - b;

上面的代码就是利用了加减法和c语言中变量赋值的特性做到的, 这样的代码在c++, java, python及其他语言也都是可行的.

此外还有单行写法

a = a + b - (b = a);

怎么样是不是很酷炫, 热爱算法的你怎么能不搞点这种又简便, 又酷炫的写法? 别急, 下面还有更多

方法三:乘除运算

// 定义两个初始值
int a = 10;
int b = 20;
// 交换两个变量的值
a = a * b;
b = a / b;
a = a / b;

原理相同, 同样的也有单行写法

a = a * b / (b = a);

因为乘除运行时从左到右的, a*b得到的结果再处以a是一定可以整除的

方法四:位运算

很多位运算都可以达到这样的效果, 不过还是异或最为简单, 其他的读者可以自行探索

// 定义两个初始值
int a = 10;
int b = 20;
// 交换两个变量的值
a = a ^ b;
b = a ^ b;
a = a ^ b;

单行写法:

a = a ^ b ^ (b = a);

总结:

上述几种方法中, 原理都大差不差, 加减运算和乘除运算会更好理解, 但是要说效率最高, 那肯定是位运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值