python 01列表异或_跟我一起学python | 探究06

b48587eae45cc8a1dbbc3f13473f6d52.png

接上一节自我探究

今天我们来探究一下基于二进制的位运算。
基于二进制的位运算有:

66051b3cadfd370a7053dc85d1f9ee2a.png

python的位运算是基于数值化为二进制后再进行的运算,其返回结果为10进制形式。

“&”按位与的运算------

我们先来尝试一下“&”按位与的运算。按位与的运算规则是:

0&0=0; 0&1=0; 1&0=0; 1&1=1。 或许这个规则不太好理解,我借用电路来说明一下。开关开就是“1”,关就是“0”;灯亮是“1”,灯灭是“0”。

7cfda681da3858a4c9c251904de2a9eb.png

用python代码来实现一下:
我想算算“8&6”,如何算呢?
【挖坑试错】

print(8&6)

运算结果是:0
我们再来人工列式演算一下,一来校验结果,二来清晰地理解按位与的运算过程:

d40edd442edb4d1fd3cf7518d2308130.png

如果是“10&6”呢?

3ed48f92416ac38418f012266c9bdf0c.png

用python代码来运行:

print(10&6)

运行的结果果真是:2


“|”按位或的运算------
“|”按位或的运算。按位或的运算规则是:0|0=0; 0|1=1; 1|0=1; 1|1=1。
为了方便大家理解,我也借用电路来说明“按位或”的运算规则:

9fb0e7bd25e787ff9ffbad53dc69c953.png

我想算算“8|6”,如何用python代码来运算呢?

print(8|6)

运行结果是:14。

我再来用python算一算“10|6”

print(10|6)

运行结果还是:14。嗯?怎么是一样的答案?
好吧,我们来人工列式演算一下,一来校验结果,二来清晰地理解按位或的运算过程:

c23362b9be616a7cbe12f07bf8450760.png

“^”按位异或的运算------

“异或”和“或”有什么不同呢?
我们先用维恩图来做个说明:

446bd19afce42e2552f2e726670c9de6.png

“异或”和“或”在运算上有怎样的不同呢?我列表做了一个对比。

23d7600fc3019cba94058f4e8f245baf.png

我们现在用python编码来算算“8^6”

print(8^6)

运行结果是:14 和“按位或”的结果一样,那么,“10^6”的结果也还是14吗?

print(10^6)

运行结果是:12

27c3c15c06c3c9c7df2acae53a329995.png

兜兜转转这么一大圈,不知道您是否还清醒。让我们回到原题中来,用“按位异或”的运算来实0现两个变量数值的交换。
【挖坑试错】

i=6
j=9
i=i^j #此行中两个变量i的数值各是多少?变量j呢?
j=i^j #此行中两个变量j的数值各是多少?变量i呢?
i=i^j #此行中两个变量i的数值各是多少?变量j呢?
print("i=",i,"j=",j)

运行结果:i=9 j=6 两个变量的数据成功交换。在这段程序中,以及所有的两个变量交换数据的程序中,一定要理解不同代码行"i"和"j"的值!这种程序也是典型的顺序结构程序。

当然,我们也可以遵照以上程序的顺序来列式计算一下:

8ad8a99898d4344f998c15bfde97865a.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值