在日常的编程中,会经常遇到需要交换两个数值得时候,我们通常的做法是创建一个新的变量,在需要交换的两个数之间起到一个中间值缓存数据的作用。那么,如果在不创建新变量的情况下,如何交换两个数的值呢:
首先我们创建一个测试程序:因为可能会有多种解决办法,所以直接用函数来实现
![](https://img-blog.csdnimg.cn/img_convert/8d94a2614f264f87b2d8f5d57b3f39a5.png)
解决办法:
方案一、加减法:
![](https://img-blog.csdnimg.cn/img_convert/706778d30051aedce237ee7d0171a115.png)
这个方法最简单,就是基本的小学算术题,需要注意的是我们在创建函数的时候,由于需要改变变量的值,所以函数的形参需要使用指针作为函数参数,再使用解引用的方式来改变变量的值。(下同)
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/478d075bb60cdb0a8ff374ddf564a863.png)
方案二、乘除法:
![](https://img-blog.csdnimg.cn/img_convert/a131cb8a91046010182785f33e82cf37.png)
跟法案一的加减法大概相同,也是小学算术题
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/64049dec63e9b5c048f4952c5bdcbc61.png)
方案三、亦或法:
![](https://img-blog.csdnimg.cn/img_convert/6c0f1a4874218c0d181c5ed424e79e93.png)
讲解:
使用亦或交换两个数的值是一种非常好的方法,其原理就是二进制数间的亦或运算
首先NumA与NumB进行^=运算,此时NumA为30
![](https://img-blog.csdnimg.cn/img_convert/d1835416d97843aaa08384e2035cef2d.png)
然后再用NumB与新的NumA进行^=运算,此时NumB经过运算就变成了NumA原来的值
![](https://img-blog.csdnimg.cn/img_convert/24ee8374602327e38e3f50da0b42767a.png)
最后再用NumA^=NumB,也就是NumA = NumA ^ NumB -> NumA = 10 ^ 30;
![](https://img-blog.csdnimg.cn/img_convert/43270868d72427b45f91ac790cfe5b13.png)
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/e65ef5efe2803543970a88901702c576.png)