2011-10-18 255 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)'相同。移位运算符只是更有效率(并且特别适合按位方式处理负数) –

相关问题