2

用于移位操作二进制按位操作的 Python 文档说参数必须是整数,但以下表达式的计算没有错误,但是对于<<和给出奇怪的结果>>

在使用布尔参数时,是否还有其他地方我应该查找&等文档,或者对评估和结果有一些很好的解释?

  • 真假:假(“布尔”类)
  • 真 | 假:真(“布尔”类)
  • 真 ^ 假:真(“布尔”类)
  • 〜真:-2(类'int')
  • 〜假:-1(类'int')
  • 真<<真:2(类'int')
  • 错误>>错误:0(类'int')

代码:

# Python ver. 3.3.2

def tryout(s):
    print(s + ':', eval(s), type(eval(s)))

tryout('True & False')
tryout('True | False')
tryout('True ^ False')
tryout('~ True')
tryout('~ False')
tryout('True << True')
tryout('False >> False')
4

1 回答 1

5

bool是 的子类int,因此它们整数。特别True是表现得像1False表现得像0

请注意,对于所有其他操作,只有重新实现和(来源:python 源代码中的源代码)[bool 实际上:继承] ,因此结果是s,语义是整数。&|^Objects/boolobject.cintint

关于<<and >>,表达式True << True等价于1 << 1ie 1 * 2 == 2, while False >> Falseis 0 >> 0, ie 0 * 1 == 0

在对它们进行算术运算时,您应该考虑 pythonTrueFalseas 。的重新实现,只影响返回类型,影响语义。10&|^

于 2013-08-22T12:03:20.603 回答