2015-09-20 49 views
0

Python如何执行按位操作?是从LSB到MSB,还是相反?那么Python如何对具有不同位数的数字进行操作?举例来说,假设我有:Python和按位操作

A = 0000 1000 1111 1001 0101 
B = 0110 1010 
C = (A & B) is not 0 

Python是否开始从MSB上的每个操作,这将评估为真,但如果它从开始操作LSB每个,它会评估为False。

+0

它从LSB –

+1

**开始**注意:**不是0的事实将按预期工作(在CPython上)仅仅是因为运气。您*必须*使用'!= 0'来让程序根据语言具有正确的语义。可能有一个python的实现,因为“不是”比较身份而不是值,独立于“A和B”的值,“C”总是* false。文档很清楚哪些对象是单例。它们是'None','True','False','Ellipsis','NotImplemented'。数字*不*保证是单身人士。 – Bakuriu

+0

@Bakuriu是的,其实我刚才发现了一个。事实上,这就是促成这个问题的原因。我和两个200多位字符串在一起,并且保持了错误的“真实”值。 – Woody1193

回答

2

以二进制前置输入数字的0b(并离开了空格),就像你会与0x为十六进制数字:

A = 0b00001000111110010101 
B = 0b01101010 
C = (A & B) is not 0 

您可以检查由打印出来蟒蛇如何解释这个(二进制例如十六进制):

print('{0:b} {0:x}'.format(A)) 
# 1000111110010101 8f95 

如您所见:它从LSB开始。

当与is"is" operator behaves unexpectedly with integers比较整数时,还会注意到一个python怪癖。因此==可能是更安全的选择。

+1

这不是一个怪癖。 '是'检查*对象标识*。 '=='比较*值*。使用一个代替另一个就像使用'.append()'而不是'.pop()'使用'list's,或者在'str's的情况下使用'len'而不是'int'。 – Bakuriu

+0

这个怪癖是255以上的单数是单身(“is”会在那里工作)。以上的不是。 'is'和'=='之间的区别完全合理! –