先上一段代码来看看 按位与 &
a=9 #9的二进制是1001
b=13 #13的二进制是1101
print(a&b) #结果是9
根据1&1=1,1&0=0,0&0=0,0&1=0的运算规则,
类似于千位,百位,十位,个位的一 一比较
但其实没有十位个位一说
方便理解罢了,按位置来一 一比对运算
这里就是1001与1101,1&1为1,0&1为0,0&0为0,1&1为1
对应位置上进行运算,得出的结果是1001,再转换为十进制,所以是9
接着来看看 按位并 |
c=5 #5的二进制是101
d=6 #6的二进制是110
print(c|d) #结果为7
根据1|1=1 ,1|0=1, 0|1=1, 0|0=0
这里就是101与110,1|1为1,0|1为1,1|0为1
得出的结果是111,转换为十进制就是7
然后是 按位异或 ^
e=5 #5的二进制是101
f=3 #3的二级制是11
print(e^f) #结果为6
按位异或的运算原则是对应位置的数字相加,但是不能进位
这里按位置相加,将3的二进制看为011,
1+0=1,0+1=1,1+1=0
这里1+1本来是等于2,二进制就是等于10,但是由于不能进位,所以仅保留0
对位相加的结果是110,转换为十进制就是6
再来看看and
g=4
h=7
print(g and h)
#结果为7,左右都真,返回h,即返回and右侧的值
print(g and 0)
#结果为0,左真右假,返回假的值,即返回0
print(2>3 and 4>2)
#结果为False,左假右真,返回假的值,即2>3的值false
and运算,and左右表达式都为真则返回右侧表达式的值,有一个为假则返回假的表达式的值
最后是or
or运算有一个“短路”机制,即or的左侧为真,就直接返回左侧的值作为or这个整体表达式的值
至于or右侧的值就不会再去看。如果左侧为假,则会继续取右侧表达式的值
print(3 or 0) #结果为3
print(0 or 0) #结果为0
print(0 or 3) #结果为3
print(3 or 5) #结果为3
第四行的结果为3,是因为左侧已经为真,所以直接返回3,
发生“短路”,不会再去取右侧的值5
这里是全部代码的运算结果