python中按位与运算符 python按位与怎么算_python 01列表异或


接上一节自我探究

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


python中按位与运算符 python按位与怎么算_python 01列表异或_02


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

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

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

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


python中按位与运算符 python按位与怎么算_位或_03


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


print(8&6)


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


python中按位与运算符 python按位与怎么算_python_04


如果是“10&6”呢?


python中按位与运算符 python按位与怎么算_按位与_05


用python代码来运行:


print(10&6)


运行的结果果真是:2


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


python中按位与运算符 python按位与怎么算_python_06


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


print(8|6)


运行结果是:14。

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


print(10|6)


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


python中按位与运算符 python按位与怎么算_python_07



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

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


python中按位与运算符 python按位与怎么算_python_08


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


python中按位与运算符 python按位与怎么算_位或_09


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


print(8^6)


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


print(10^6)


运行结果是:12


python中按位与运算符 python按位与怎么算_位或_10


兜兜转转这么一大圈,不知道您是否还清醒。让我们回到原题中来,用“按位异或”的运算来实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"的值!这种程序也是典型的顺序结构程序。

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


python中按位与运算符 python按位与怎么算_按位与_11