![b48587eae45cc8a1dbbc3f13473f6d52.png](https://i-blog.csdnimg.cn/blog_migrate/b85ea5e07c99c7c92c50cd23de6b1efb.jpeg)
接上一节自我探究
今天我们来探究一下基于二进制的位运算。
基于二进制的位运算有:
![66051b3cadfd370a7053dc85d1f9ee2a.png](https://i-blog.csdnimg.cn/blog_migrate/2590cd55a2d3bf17a6a3d25721bdb387.png)
python的位运算是基于数值化为二进制后再进行的运算,其返回结果为10进制形式。
“&”按位与的运算------
我们先来尝试一下“&”按位与的运算。按位与的运算规则是:
0&0=0; 0&1=0; 1&0=0; 1&1=1。 或许这个规则不太好理解,我借用电路来说明一下。开关开就是“1”,关就是“0”;灯亮是“1”,灯灭是“0”。
![7cfda681da3858a4c9c251904de2a9eb.png](https://i-blog.csdnimg.cn/blog_migrate/1847c53f6eb9dcf19763f855dca6d9ba.png)
用python代码来实现一下:
我想算算“8&6”,如何算呢?
【挖坑试错】
print(8&6)
运算结果是:0
我们再来人工列式演算一下,一来校验结果,二来清晰地理解按位与的运算过程:
![d40edd442edb4d1fd3cf7518d2308130.png](https://i-blog.csdnimg.cn/blog_migrate/6ea949f2b4452013dd280f5c0788282e.png)
如果是“10&6”呢?
![3ed48f92416ac38418f012266c9bdf0c.png](https://i-blog.csdnimg.cn/blog_migrate/38f026a31d0aad76a558d9c8e728fc16.png)
用python代码来运行:
print(10&6)
运行的结果果真是:2
“|”按位或的运算------
“|”按位或的运算。按位或的运算规则是:0|0=0; 0|1=1; 1|0=1; 1|1=1。
为了方便大家理解,我也借用电路来说明“按位或”的运算规则:
![9fb0e7bd25e787ff9ffbad53dc69c953.png](https://i-blog.csdnimg.cn/blog_migrate/97bf0dbb7cf0fcdb166fee6de93cf95b.png)
我想算算“8|6”,如何用python代码来运算呢?
print(8|6)
运行结果是:14。
我再来用python算一算“10|6”
print(10|6)
运行结果还是:14。嗯?怎么是一样的答案?
好吧,我们来人工列式演算一下,一来校验结果,二来清晰地理解按位或的运算过程:
![c23362b9be616a7cbe12f07bf8450760.png](https://i-blog.csdnimg.cn/blog_migrate/901db4513cb2c20c516ed80c6d90440e.png)
“^”按位异或的运算------
“异或”和“或”有什么不同呢?
我们先用维恩图来做个说明:
![446bd19afce42e2552f2e726670c9de6.png](https://i-blog.csdnimg.cn/blog_migrate/95b6b4ae28e09418c93ed35e917cbc95.png)
“异或”和“或”在运算上有怎样的不同呢?我列表做了一个对比。
![23d7600fc3019cba94058f4e8f245baf.png](https://i-blog.csdnimg.cn/blog_migrate/0782344aace940135d70b41bf8a99754.png)
我们现在用python编码来算算“8^6”
print(8^6)
运行结果是:14 和“按位或”的结果一样,那么,“10^6”的结果也还是14吗?
print(10^6)
运行结果是:12
![27c3c15c06c3c9c7df2acae53a329995.png](https://i-blog.csdnimg.cn/blog_migrate/fcef9336db41c604e592e15ac5b48fe3.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](https://i-blog.csdnimg.cn/blog_migrate/68853a979f7c4905bbc5c1846f4ea957.png)