2011-07-02 29 views
5

Resolví un problema en Project Euler pero me llevó unos 4 minutos ejecutar, que está por encima del tiempo recomendado, por lo que estaba mirando las diferentes soluciones en el foro. Uno de ellos incluía el símbolo << en una lista de comprensión. Esto es lo que parecía¿Qué significa << hacer en Python?

blist.extend([(i << 1) + 3 for i in range(num) if alist.get(i)]) 

no puedo encontrar en cualquier lugar lo que hace exactamente este símbolo <<. ¿Alguien me puede ayudar?

+2

http://docs.python.org/library/operator.html#mapping-operators-to -funciones – Trufa

Respuesta

10

Es un bit shift operator (Python docs), y es común entre muchos lenguajes de programación, como C, Java, PHP, etc. De acuerdo con la documentación de Python:

cambian el primer argumento de la izquierda o justo por el número de bits dado por el segundo argumento.

Un desplazamiento a la derecha por n bits se define como división por pow (2, n). Un desplazamiento a la izquierda por n bits se define como la multiplicación con pow (2, n). Los recuentos de cambios negativos plantean una excepción de ValueError.

Así, en su caso específico, i << 1 significa desplazamiento a la izquierda en 1 bit, que es equivalente a multiplicar por 2^1, o simplemente 2.

+0

entonces si es i >> 1 ¿sería mod (i, 2) o se movería hacia la derecha más allá de un decimal? – gtmanfred

+0

El desplazamiento a la derecha está dividido por 2^n, o en el caso que citó, solo 2. Fuera de mi cabeza, creo que también es solo una división entera, así que no creo que obtengas valores decimales ... –

+0

bien eso es lo que quise decir, no sé por qué dije mod. Gracias – gtmanfred

1

Es un operador de desplazamiento bit a bit.

x << n 
x shifted left by n bits 

x >> n 
x shifted right by n bits