python:and和&运算符及or和|运算符的区别

最近发现了一个很有意思的问题,直接上代码:

5>3 and 10<9
# 结果显而易见是False

从逻辑运算的角度来说,前面的运算结果为True,后面的运算结果为False,and表示与运算,即两者都为True,才能为True,因此结果为False。

接下来试试并应该和and逻辑运算相同结果的符号“&”,上代码:

5>3 & 10<9
#经过测试,该结果为True
(5>3) & (10<9)
#上述结果为False,与and运算结果相同

查了一些资料得到是因为&进行了优先运算,有一定的priority优先级。那么&运算是什么结果呢?

3 & 10
# 结果为2

那就能够解释上述5>3 & 10<9的结果转变为5>2<9,从左向右得到结果True,因此转变为如下问题。

Q:为什么3&10的结果为2呢?

A:符号&表示的为位与操作,即将两数的二进制表示的每一位进行逻辑与操作,与逻辑是两个二进制都为1,结果才能得到1,否则为0。3的二进制为11,10的二进制为1010,按照位与操作的结果为0010,此种不足的位置补位0,即3变为0011,与1010进行计算。用十进制转化结果0010,得到数值结果2。

|与or运算如上同理,上代码。

5>3 or 10<9
# 结果显而易见是True
5>3 | 10<9
# 结果为False
(5>3) | (10<9)
# 结果为True 问题一样
3 | 10
# 结果是11
Q:为什么3|10的结果为11呢?

A:符号&表示的为位或操作,即将两数的二进制表示的每一位进行逻辑或操作,或逻辑是只要有一个数为1,结果为1,只有两个数都为0,才能计算为0。3的二进制为11,10的二进制为1010,按照位或操作的结果为1011。用十进制转化结果1011,得到数值结果11。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值