【发布时间】:2015-09-20 19:31:12
【问题描述】:
Python 如何进行位运算?是从 LSB 到 MSB,还是相反? Python如何对不同位数的数字进行运算?例如,假设我有:
A = 0000 1000 1111 1001 0101
B = 0110 1010
C = (A & B) is not 0
如果 Python 从每个上的 MSB 开始操作,这将评估为 True,但如果它从每个上的 LSB 开始操作,它将评估为 False。
【问题讨论】:
-
从LSB开始
-
注意:
is not 0将按预期工作(在 CPython 上)只是由于运气。您必须使用!= 0来拥有根据语言具有正确语义的程序。可能有一个 python 实现,C总是 false,因为is not是比较身份而不是值,与A & B的值无关。文档非常清楚哪些对象是单例。它们是None、True、False、Ellipsis、NotImplemented。数字不保证为单例。 -
@Bakuriu 是的,实际上我刚刚发现了那个。实际上,这就是引发这个问题的原因。我将两个 200+ 位字符串组合在一起,并不断得到错误的
true值。 -
作为参考:仅将
is与None一起使用,或者在需要标记值时使用(在这种情况下,您将拥有:sentinel = object(); #do stuff; if somethign is sentinel)。其他单例几乎不会出现在真正的 Python 代码中,所有其他情况都需要使用==。