python - int 如何作为 bool 语句求值?

标签 python bit-manipulation bitwise-operators

所以我最近在Codecademy上学习Python,我不小心提交了这个

    def check_bit4(input):
        if 0b1000 & input:
            return "on"
        else:
            return "off"

作为我的代码,它应该是这样的(省略了 if 语句中的“> 0 ”)。由于某种原因,上面的代码仍然通过了所有给定的测试用例。

    def check_bit4(input):
        if 0b1000 & input > 0:
            return "on"
        else:
            return "off"

最初的提示要求一个函数来检查第四位是否为“on”。据我所知,“&”运算符应该返回 int 值而不是 bool 值。所以,我的问题是,为什么第一个程序仍然通过了所有测试用例?

最佳答案

零被视为虚假值。其他数均视为真值:

>>> bool(1)
True
>>> bool(34)
True
>>> bool(0)
False
如果input 设置了位,

0b1000 & input 将返回非零值。因此,如果满足该条件,谓词将被视为 true。

参见Truth Value Testing - Python documentation更精确地定义真值。

关于python - int 如何作为 bool 语句求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33818739/

相关文章:

c - 了解典型系统中带符号数和负数表示的按位求反

python - 失败前提条件错误: Table not initialized

python - 多索引数据框连接(如果不是 NaN 则保留更新的数据并附加到新索引)

python - Django on Production 不在 Django Admin 中显示我模型的所有字段

c++ - 是否可以指定按位操作的返回类型?

python-3.x - 此除法函数的时间复杂度是多少(未使用除法或乘法运算符)?

objective-c - 位图行宽的奇怪按位运算,这是什么意思? (以及为什么)

python - astimezone() 不能应用于原始日期时间

c++ - 在 C++ 中将 long long 转换为字节数组并返回

language-agnostic - 如何获得跨步模式的校验和