根据我对按位运算符的理解,以下代码仅应在i和j都等于5的情况下执行,如果条件值应为False,则对于i和j的所有其他值。但我得到以下输出:
for i in range(30):
for j in range(30):
if i == 5 & j == 5:
print(i, j, i & j, bin(i==5), bin(j==5), i == 5 & j == 5)
# i, j, i & j, binary value of i, binary value of j, bitwise and of i == 5 and j == 5
5 5 5 0b1 0b1 True
5 7 5 0b1 0b0 False
5 13 5 0b1 0b0 False
5 15 5 0b1 0b0 False
5 21 5 0b1 0b0 False
5 23 5 0b1 0b0 False
5 29 5 0b1 0b0 False
问题:
i和j的二进制值仅在第一种情况下为1,那么为什么还要打印其他情况?
为什么在i&j评估为5的地方打印结果
如果我更改上述if语句中的条件顺序,则i会获得值5、7、13、15、21、23、29,而j仍为5,其他输出也相同。为什么?
对于上述代码,i = 7且j = 5,i&j也计算为5。那为什么不打印呢?
从文档中
与C不同,Python中的所有比较操作都具有相同的优先级,该优先级低于任何算术,移位或按位运算。同样与C不同,像<b <c这样的表达式具有数学上的常规解释:
所以在这里:
i == 5 & j == 5
什么情况是,5 & j
在对测试i
和5
平等。因此,括号会起作用,但是正确的方法是使用具有更高优先级的逻辑 and
运算符:
i == 5 and j == 5
它也短路,这意味着如果i != 5
,j
甚至没有进行测试(更快的执行)。完全适用于此示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句