2011-10-18 39 views
1

我在Python下面的代碼:這個轉換「1 << i」如何在Python中工作?

for i in range(4): 
    if self.start == self.corners[i]: 
    self.visitedCorners += (1 << i) 

我與統籌工作。 self.startself.corners是座標。

因此,在頂部的代碼我想檢查開始是否是一個角落。 如果開始的角落是相同的,我會這樣做。但是,這種轉變是如何發揮作用的?

我不想要任何其他代碼;我只是想了解這個的代碼。

+0

https://secure.wikimedia.org/wikipedia/en/wiki/Logical_shift –

+0

它相當於2的冪(2的冪的i + 1)。歡迎來到二進制。你會在軟件開發中看到很多二進制的東西。 1,2,4,8,16,32 ... –

+0

*在Python中shift 1「i」是如何工作的?*:和其他語言一樣....(抱歉,無法抗拒; ))。 –

回答

4

所有這些1 << i所做的是產生具有設置爲0第至少顯著位設爲1i和所有其他位的數目:

>>> for i in range(4): print bin(1 << i) 
... 
0b1 
0b10 
0b100 
0b1000 

在代碼中,self.visitedCorners是一個位掩碼,其中,所述四個最低有效位對應於四個角。 for i循環的每次迭代將self.visitedCorners中的對應位設置爲1(前提條件爲if條件成立)。

+0

+1。雖然沒有上下文,但最後一行必須是'self.visitedCorners | =(1 << i)'以確保正確工作的位掩碼。 – back2dos

+0

另一種說法是'1 << i'與'2 ** i'相同。一般來說,'x << i'與'x *(2 ** i)'相同。移位運算符只是更有效率(並且特別適合按位方式處理負數) –

相關問題