Python中bitwise AND比较结果与逻辑and不一致问题咨询
核心原因:运算符优先级差异
Python 中位运算符&的优先级远高于比较运算符(>、<等),而逻辑运算符and的优先级低于比较运算符,二者的运算顺序完全不同。
第一条语句i>4 & i<5的运算过程:
- 先执行优先级最高的位运算
4 & i:i=5,4的二进制为100,5的二进制为101- 按位与计算结果为
100,即十进制的4
- 原式等价转换为链式比较
i > 4 < 5,Python的链式比较会自动拆解为(i > 4) and (4 < 5) - 代入数值计算:
(5>4) and (4<5)→True and True,最终结果为True
第二条语句i>4 and i<5的运算过程:
- 逻辑运算符
and优先级低,先执行两侧的比较运算,原式等价于(i>4) and (i<5) - 代入数值计算:
(5>4) and (5<5)→True and False,最终结果为False
补充提示:如果你需要对两个布尔表达式的结果做按位与,请手动加括号明确运算顺序,例如
(i>4) & (i<5),此时结果就和and运算一致为False。
内容的提问来源于stack exchange,提问作者thehumbling
相关产品推荐
相关产品推荐

