Python3中位与、逻辑与和等于运算符混用结果存在差异的原因是什么
位与运算语句返回False的深层原因
核心问题出在运算符优先级差异上,不同运算符的执行顺序不同直接导致了最终结果的差异:
- 位与运算符
&的优先级 高于 相等比较运算符== - 逻辑与运算符
and的优先级 低于 相等比较运算符==
位与语句执行逻辑拆解
你给出的位与语句:
1110010110001000 == 1110010110001000 & 1 == 1 & 1000001000001101 == 1000001000001101 & 1 == 1
因为&优先级更高,程序会先执行所有位与运算:
- 计算
1110010110001000 & 1:该数字二进制末尾为0,和1位与结果为0 - 计算
1 & 1000001000001101:该数字二进制末尾为1,和1位与结果为1 - 计算
1000001000001101 & 1:结果为1
运算后语句简化为链式比较:1110010110001000 == 0 == 1 == 1 == 1,显然结果为False。
逻辑与语句执行逻辑拆解
你给出的逻辑与语句:
1110010110001000 == 1110010110001000 and 1 == 1 and 1000001000001101 == 1000001000001101 and 1 == 1
因为and优先级更低,程序会先执行所有相等比较运算:
1110010110001000 == 1110010110001000结果为True1 == 1结果为True1000001000001101 == 1000001000001101结果为True1 == 1结果为True
运算后语句简化为:True and True and True and True,结果为True。
修正方案
如果要使用位与运算符达到同样的预期效果,需要用括号强制提升比较运算的执行优先级:
(1110010110001000 == 1110010110001000) & (1 == 1) & (1000001000001101 == 1000001000001101) & (1 == 1)
该语句执行后会返回True。
内容的提问来源于stack exchange,提问作者gopinathbalu
相关产品推荐
相关产品推荐

