web-dev-qa-db-fra.com

Que signifient >> et << en Python?

Je remarque que je peux faire des choses comme 2 << 5 pour obtenir 64 et 1000 >> 2 pour obtenir 250.

Aussi, je peux utiliser >> dans print:

print >>obj, "Hello world"

Que se passe-t-il ici?

46
user3201152

Ce sont des opérateurs de décalage au niveau du bit.

Citant le docs :

x << y

Retourne x avec les bits décalés vers la gauche de y places (et les nouveaux bits situés à droite sont des zéros). Cela revient à multiplier x par 2**y.

x >> y

Retourne x avec les bits décalés vers la droite de y places. Cela revient à diviser x par 2**y.

35
James

Je pense que c'est une question importante à laquelle il n'a pas encore été répondu (le PO semble déjà connaître les opérateurs de postes). Laissez-moi essayer de répondre, l'opérateur >> dans votre exemple est utilisé à deux fins différentes. En termes c ++, cet opérateur est surchargé. Dans le premier exemple, il est utilisé comme opérateur au niveau des bits (décalage à gauche), tandis que dans le deuxième scénario, il est simplement utilisé comme redirection de sortie. c'est à dire.

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, 

exemple

with open('foo.txt', 'w') as obj:
    print >> obj, "Hello world" # hello world now saved in foo.txt

mise à jour:

Dans python 3, il est possible de donner directement l’argument du fichier comme suit:

print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
33
yosemite_k

L’autre cas impliquant print >>obj, "Hello World" Est la syntaxe "print chevron" pour la print statement in Python 2 (supprimé dans Python 3, remplacé par l'argument file de la print() fonction). Au lieu d'écrire sur la sortie standard, la sortie est transmise à la méthode obj.write(). Un exemple typique serait les objets fichier ayant une méthode write(). Voir la réponse à une question plus récente: Double plus grand que connectez-vous en Python .

10
chrstphrchvz

12 << 2

48

La valeur binaire réelle de 12 est "00 1100" lorsque nous exécutons l'instruction ci-dessus. Décalage à gauche (2 positions décalées à gauche) renvoie la valeur 48 et sa valeur binaire est "11 0000".

48 >> 2

12

La valeur binaire de 48 est "11 0000", après l'exécution de l'instruction ci-dessus Décalage à droite (2 positions décalées à droite) renvoie la valeur 12, sa valeur binaire est "00 1100".

9
PAC

Ce sont les opérateurs de quart

x << y Retourne x avec les bits décalés à gauche de y places (et les nouveaux bits à droite sont des zéros). Cela revient à multiplier x par 2 ** y.

x >> y Retourne x avec les bits décalés vers la droite de y places. Ceci est identique à // 'x par 2 ** y.

6
doctorlove

Ils sont des opérateurs de décalage de bits qui existent dans de nombreux langages de programmation traditionnels, << est le décalage gauche et >> est le décalage à droite, ils peuvent être démontrés dans le tableau suivant, supposons qu'un entier ne prenne qu'un octet en mémoire.

| 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 |
2
Tsingyi