我只用两个变量实现了数值交换,组长下巴都掉地上了

admin 2023年2月18日08:43:11评论12 views字数 195阅读0分39秒阅读模式


点击上方“萝卜大杂烩”,选择“星标公众号

超级无敌干货,第一时间送达!!!

我只用两个变量实现了数值交换,组长下巴都掉地上了

我只用两个变量实现了数值交换,组长下巴都掉地上了

说起Python数值交换,大家肯定非常熟悉,代码中也经常在用,这对于初学者来说也是非常Easy的。

a和b数值交换的代码:

a = 1
b = 2

c = a
a = b
b = c

print(f"a: {a}")
print(f"b: {b}")

运行代码:

a: 2
b: 1

非常简单,毫无难度可言。

但是两个数值交换为什么非要第三个变量c参与呢?

如果我说,不允许使用第三个变量,完成数值的交换这个步骤,你会怎么做?

少了c作为承载。。难度一下子就升级了。

只有ab,难道代码是:

a = 1
b = 2

a = b
b = a

print(f"a: {a}")
print(f"b: {b}")

这显然是错误的!

我只用两个变量实现了数值交换,组长下巴都掉地上了

引入位运算完成数值交换

直接上代码吧:

a = 1
b = 2

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

print(f"a: {a}")
print(f"b: {b}")

运行代码:

a: 2
b: 1

^符号在实际开发中用到并不多,所以很多小伙伴对他并不熟悉。

这里简单快速介绍下:

^ 按位异或运算符:当两对应的二进位相异时,结果为1。

a = 60            # 60 = 0011 1100 
b = 13            # 13 = 0000 1101 
c = a ^ b         # c: 49 = 0011 0001

代码解释

  • 第一行代码:a ^= b 等同于 a = a ^ b,此刻a:0000 0011

  • 第二行代码:b ^= a 等同于 b = b ^ a,

    把第一行与第二式子结合就得到了 b = b ^ a ^ b,

    式子中b ^ b肯定等于0,

    a与0异或又获得原来的a,此刻a:0000 0011,b = b:0000 0001

  • 第三行代码:a ^= b 等同于 a = a ^ b,此刻 a:0000 0010

原理解释

上面的数值交换使用了异或运算的特性:

  1. 任意数和他自己异或的结果都为0;

  2. 0和任意数异或结果还是他自己。

后记

不知道这三行代码的原理你有没有吃透?

没有吃透也没关系,可以先在复习下位运算的知识点,再结合这三行代码去看,效果会更好。

我只用两个变量实现了数值交换,组长下巴都掉地上了
截图至菜鸟教程

今天的分享就到这里,喜欢就点个吧~

我只用两个变量实现了数值交换,组长下巴都掉地上了

人生苦短,我用python
神秘礼包获取方式
点击下方公众号回复:1024

我只用两个变量实现了数值交换,组长下巴都掉地上了

推荐阅读 点击标题可跳转

原文始发于微信公众号(萝卜大杂烩):我只用两个变量实现了数值交换,组长下巴都掉地上了

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月18日08:43:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   我只用两个变量实现了数值交换,组长下巴都掉地上了http://cn-sec.com/archives/1556689.html

发表评论

匿名网友 填写信息