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?
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
.
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,
with open('foo.txt', 'w') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
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
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 .
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".
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.
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 |