接上一节自我探究
今天我们来探究一下基于二进制的位运算。
基于二进制的位运算有:
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"的值!这种程序也是典型的顺序结构程序。
当然,我们也可以遵照以上程序的顺序来列式计算一下: