接上一节自我探究

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

基于二进制的位运算有:

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

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

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

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

用python代码来实现一下:

我想算算“8&6”,如何算呢?

【挖坑试错】

print(8&6)

运算结果是:0

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

如果是“10&6”呢?

用python代码来运行:

print(10&6)

运行的结果果真是:2

“|”按位或的运算------

“|”按位或的运算。按位或的运算规则是:0|0=0; 0|1=1; 1|0=1; 1|1=1。

为了方便大家理解,我也借用电路来说明“按位或”的运算规则:

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

print(8|6)

运行结果是:14。

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

print(10|6)

运行结果还是:14。嗯?怎么是一样的答案?

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

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

“异或”和“或”有什么不同呢?

我们先用维恩图来做个说明:

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

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

print(8^6)

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

print(10^6)

运行结果是:12

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

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