编程技巧(1):不用中间变量交换两个变量的值

------------恢复内容开始------------

1、思路

    要交换两个变量的值,教科书教我们要引入一个中间变量,然后,先把一个变量的值赋给中间变量,然后再把另一个变量的值赋给中间变量,最后再把中间变量的值赋给这个变量。代码如下:


 

运行结果:


 

    如果不用中间变量,要怎么交换呢,就要符合下面两个原则:一、把两个变量的值的某种结合保存到其中一个变量里, 二、被覆盖的变量的值可由结合值与另一个变量的值的某种运算恢复,基于这两个原则,首先时要找到一种运算,这种运算的结果与可通过另一种运算得到自身。一般形式为

变量1=变量1 某种运算 变量2变量2=变量1(结合值) 另一种运算 变量2变量1=变量1(还是结合值) 另一种运算 变量2(值已经交换)

2、交换两个整数

思路一:两次异或返回自身,代码如下:

 


 

记忆:等号右边都是x^y,等号左边依次是x、y、x。

    运行结果:


 

思路二:加上一个数,再进去一个数等于自身


 

记忆:等号右边都是x和y,先+再--,等号左边是x、y、x。

注意乘除法不可以,一是有可能产生舍入误差。

运行结果:


 

3、交换两个布尔值

    思路一:跟数字一样,两次异或返回自身,代码如下:


 

    运行结果:


 

思路二:布尔变量只有真、假两个值,两个变量之间只有相同和不相同两种状态,可以将这种状态保存在一个变量中,那另一种变量值就可依据这个状态获得。代码如下:


 

运行结果:


 

4、交换两个字符串

    思路:将两个字符串拼接,拼接字符串的长度与另一个字符串的长度的差即为覆盖字符串的长度。代码如下:


 

运行结果:

 


 

5、使用C#7.0的元组交换任意两个变量

C# 7.0增加了元组数据类型,可以进行多个变量的并行复制,利用这种新特性,可以一步交换任意相同类型的两个变量的值,交换数组的代码如下:


 

    运行结果:


 

7,其他语言直接交换两个变量

有很多语言提供了并行赋值,可以一步直接交换两个变量的值。

    Python语言的交换:


 

Go语言的交换:


 

8、下期预告

  编程技巧(2):计算动态四则运算表达式的值的简单办法

  根据配置的或用户录入的四则运算表达式结合变量计算出值或进行某项操作是编程当中的一个难点,教科书上介绍的是使用链表及递归的方法进行计算,但语法较复杂,而且容易出错,本文会分享几个计算动态表达式的简单小技巧。

--正文完--

    本文首发于我的公众号:致力于使编程变得简单和有趣的【NET全栈序员】,如果您也对让计算机完全的乖乖的听话感兴趣,请扫描下方二维码关注我。

    欢迎全文转载。转载请保留微信公众号二维码图片。

 

posted @ 2020-04-12 19:05  .NET全栈工程师  阅读(1331)  评论(0编辑  收藏  举报