为什么下面的代码输出是这样的

伊库拉纳

根据我对按位运算符的理解,以下代码仅应在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

问题:

  1. i和j的二进制值仅在第一种情况下为1,那么为什么还要打印其他情况?

  2. 为什么在i&j评估为5的地方打印结果

  3. 如果我更改上述if语句中的条件顺序,则i会获得值5、7、13、15、21、23、29,而j仍为5,其他输出也相同。为什么?

  4. 对于上述代码,i = 7且j = 5,i&j也计算为5。那为什么不打印呢?

让·弗朗索瓦·法布尔

文档中

与C不同,Python中的所有比较操作都具有相同的优先级,该优先级低于任何算术,移位或按位运算。同样与C不同,像<b <c这样的表达式具有数学上的常规解释:

所以在这里:

i == 5 & j == 5

什么情况是,5 & j在对测试i5平等。因此,括号会起作用,但是正确的方法是使用具有更高优先级的逻辑 and运算符:

i == 5 and j == 5

它也短路,这意味着如果i != 5j甚至没有进行测试(更快的执行)。完全适用于此示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么下面的代码是这样的Big O符号?

为什么下面的代码无法输出Hello World?

为什么输出是这在下面的Java代码?

为什么下面的代码输出是“找不到”而不是“找到”?

为什么下面的代码输出“ Dollars”而不是“ 2 dollars”?

Java的操作员,+ - 什么是在下面的代码发生的事情,为什么它是这样写的是

下面的python代码的输出是什么

为什么下面的netstat、ps、auth.log有这样的输出?

为什么下面的netstat、ps、auth.log有这样的输出?

为什么下面的代码显示NameError?

为什么下面的代码给ArrayIndexOutofBounds异常?

为什么下面的代码没有在 C# 中返回预期的输出?

为什么下面的代码没有在输出中生成“1”?

为什么下面的查询没有给出正确的输出

为什么下面的Integer类型变量输出-1?

为什么下面的函数输出未定义

为什么这个'C'代码的输出是这样的?

在下面的代码中,为什么会提示“OUCH”?

为什么下面的Parse代码没有返回错误?

为什么下面的代码不打印出质数

为什么下面的Java代码会给出StackOverflow错误?

为什么下面的代码会导致excel崩溃?

为什么下面的代码打印出10而不是null?

为什么下面的代码不切换面板?

为什么下面的代码编译没有错误?

为什么下面的 ScopedThread 代码不调用线程执行?

为什么下面的代码无法解除对SIGINT信号的阻止

为什么下面的python代码会抛出内存错误?

为什么下面的.htaccess代码无法正常工作