logical - ¿Qué significan>> y<< en Python?
python// operator double slash (5)
Me doy cuenta de que puedo hacer cosas como 2 << 5
para obtener 64 y 1000 >> 2
para obtener 250.
También puedo usar >>
en print
:
print >>obj, "Hello world"
¿Que está sucediendo aquí?
12 << 2
48
El valor binario real de 12 es "00 1100" cuando ejecutamos la instrucción anterior. El desplazamiento a la izquierda (2 lugares desplazados a la izquierda) devuelve el valor 48, su valor binario es "11 0000".
48 >> 2
12
El valor binario de 48 es "11 0000", después de ejecutar la instrucción anterior Desplazar a la derecha (2 lugares desplazados a la derecha) devuelve el valor 12, su valor binario es "00 1100".
Creo que es una pregunta importante y aún no está respondida (parece que el OP ya sabe acerca de los operadores de turnos). Permítame tratar de responder, el operador >> en su ejemplo se usa para dos propósitos diferentes. En términos de c ++ este operador está sobrecargado. En el primer ejemplo se usa como operador bitwise (desplazamiento a la izquierda), mientras que en el segundo escenario se usa simplemente como redirección de salida. es decir
2 << 5 # shift to left by 5 bits
2 >> 5 # shift to right by 5 bits
print >> obj, "Hello world" # redirect the output to obj,
ejemplo
with open(''foo.txt'', ''w'') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
El otro caso relacionado con print >>obj, "Hello World"
es la sintaxis de "print chevron" para la declaración print
en Python 2 (eliminada en Python 3, reemplazada por el argumento del file
de la función print()
). En lugar de escribir en la salida estándar, la salida se pasa al método obj.write()
. Un ejemplo típico serían los objetos de archivo que tienen un método write()
. Vea la respuesta a una pregunta más reciente: doble mayor que el inicio de sesión en Python .
Estos son los operadores de cambio
x << y Devuelve x con los bits desplazados a la izquierda por y lugares (y los nuevos bits en el lado derecho son ceros). Esto es lo mismo que multiplicar x por 2 ** y.
x >> y Devuelve x con los bits desplazados a la derecha por y lugares. Esto es lo mismo que // ''ing x by 2 ** y.
Estos son operadores de cambio a nivel de bit.
Citando de los documentos :
x << y
Devuelve x
con los bits desplazados a la izquierda por y lugares (y los nuevos bits en el lado derecho son ceros). Esto es lo mismo que multiplicar x
por 2**y
.
x >> y
Devuelve x
con los bits desplazados a la derecha por y lugares. Esto es lo mismo que dividir x
por 2**y
.