Noto que puedo hacer cosas como 2 << 5
obtener 64 y 1000 >> 2
250.
También puedo usar >>
en print
:
print >>obj, "Hello world"
¿Que está sucediendo aquí?
Noto que puedo hacer cosas como 2 << 5
obtener 64 y 1000 >> 2
250.
También puedo usar >>
en print
:
print >>obj, "Hello world"
¿Que está sucediendo aquí?
Respuestas:
Creo que es una pregunta importante y aún no está respondida (el OP parece saber ya sobre los operadores de turno). Déjame intentar responder, el operador >> en tu 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 bit a bit (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,
with open('foo.txt', 'w') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
En python 3 es posible dar el argumento del archivo directamente de la siguiente manera:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
__rshift__
y __lshift__
.
Estos son operadores de desplazamiento bit a bit.
Citando de los documentos :
x << y
Retorna x
con los bits desplazados hacia la izquierda en 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 hacia la derecha en y lugares. Esto es lo mismo que dividir x
por 2**y
.
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
y así sucesivamente. Puedes ver cómo funciona sin explicaciones.
print >>obj, "Hello world"
2 << 5
y 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
El valor binario real de 12 es "00 1100" cuando ejecutamos la instrucción anterior. 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 Desplazamiento a la derecha (2 lugares desplazados a la derecha) devuelve el valor 12, su valor binario es "00 1100".
El otro caso que involucra print >>obj, "Hello World"
es la sintaxis "print chevron" para la print
declaración en Python 2 (eliminada en Python 3, reemplazada por el file
argumento de la print()
función ). En lugar de escribir en la salida estándar, la salida se pasa al obj.write()
método. Un ejemplo típico serían los objetos de archivo que tienen un write()
método. Vea la respuesta a una pregunta más reciente: Doble signo mayor que en Python .
Son un operador de desplazamiento de bits que existe en muchos lenguajes de programación convencionales, <<
es el desplazamiento a la izquierda y >>
es el desplazamiento a la derecha, se pueden demostrar en la siguiente tabla, suponga que un número entero solo ocupa 1 byte en la memoria.
| operate | bit value | octal value | description |
| ------- | --------- | ----------- | -------------------------------------------------------- |
| | 00000100 | 4 | |
| 4 << 2 | 00010000 | 16 | move all bits to left 2 bits, filled with 0 at the right |
| 16 >> 2 | 00000100 | 4 | move all bits to right 2 bits, filled with 0 at the left |
Estos son los operadores de turno
x << y Devuelve x con los bits desplazados hacia la izquierda en lugares y (y los nuevos bits del 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 en y lugares. Esto es lo mismo que // 'ing x por 2 ** y.
<< Mean any given number will be multiply by 2the power
for exp:- 2<<2=2*2'1=4
6<<2'4=6*2*2*2*2*2=64
<<
,>>
,&
,|
,~
, y^
hacer?