移位和二进制位运算符适用于布尔参数

时间:2013-08-22 12:01:04

标签: python python-3.3

shifting operationsbinary bitwise operations的Python文档说参数必须是整数,但下面的表达式会毫无错误地进行求值,但会给<<>>带来奇怪的结果。< / p>

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

  • 真实&amp;错误:错误(类'bool')
  • True | False:True(类'bool')
  • True ^ False:True(类'bool')
  • ~True:-2(class'int')
  • ~False:-1(class'int')
  • True&lt;&lt;真:2(类'int')
  • 错误&gt;&gt;错误: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')

1 个答案:

答案 0 :(得分:5)

boolint的子类,因此整数。特别是True的行为与1相似,False的行为与0相似。

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

关于<<>>,表达式True << True相当于1 << 1,即1 * 2 == 2,而False >> False0 >> 0 ,即0 * 1 == 0

在对它们进行算术运算时,您应该将python的TrueFalse视为10。仅重新实现&|^ affect the return type,而不是语义。