shifting operations 的 Python 文档和 binary bitwise operations说参数必须是整数,但下面的表达式计算没有错误,但是给出了 <<
的奇怪结果和 >>
.
我应该在其他地方寻找 &
的文档吗?等等。当使用 bool 参数时,或者对评估和结果有一些好的解释吗?
- 真与假:假(类“bool”)
- 正确 |假:真(类“ bool ”)
- 正确 ^ 错误:正确(类“bool”)
- ~ 正确:-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')
最佳答案
bool
是 int
的子类,因此它们是整数。特别是True
表现得像 1
和 False
表现得像 0
.
请注意 bool
仅重新实现&
, |
和 ^
(来源:python 源中 Objects/boolobject.c
的源代码),对于所有其他操作,int
的方法使用[实际上:继承],因此结果是int
s 和语义是整数的语义。
关于 <<
和 >>
, 表达式 True << True
相当于1 << 1
即 1 * 2 == 2
, 而 False >> False
是0 >> 0
,即 0 * 1 == 0
.
你应该想到python的True
和 False
作为1
和 0
在对它们进行算术运算时。 &
的重新实现, |
和 ^
仅 affect the return type ,而不是语义。
关于python - 移位运算符和二进制按位运算符适用于 bool 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18379847/