Je remarque que je peux faire des choses comme 2 << 5
obtenir 64 et 1000 >> 2
250.
Je peux aussi utiliser >>
dans print
:
print >>obj, "Hello world"
Que se passe-t-il ici?
Je remarque que je peux faire des choses comme 2 << 5
obtenir 64 et 1000 >> 2
250.
Je peux aussi utiliser >>
dans print
:
print >>obj, "Hello world"
Que se passe-t-il ici?
Réponses:
Je pense que c'est une question importante et elle n'a pas encore de réponse (l'OP semble déjà connaître les opérateurs de quart). 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 du bit (décalage à gauche), tandis que dans le second 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
En python 3, il est possible de donner directement l'argument file comme suit:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
__rshift__
et __lshift__
.
Ce sont des opérateurs de décalage au niveau du bit.
Citant les documents :
x << y
Renvoie x
avec les bits décalés vers la gauche de y places (et les nouveaux bits du côté droit sont des zéros). C'est la même chose que 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
.
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
et ainsi de suite. Vous pouvez voir comment cela fonctionne sans explications.
print >>obj, "Hello world"
2 << 5
et 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
La valeur binaire réelle de 12 est "00 1100" lorsque nous exécutons l'instruction ci-dessus. Décalage à gauche (décalage de 2 places vers la gauche) renvoie la valeur 48, sa valeur binaire est "11 0000".
48 >> 2
12
La valeur binaire de 48 est "11 0000", après avoir exécuté l'instruction ci-dessus. Décalage vers la droite (décalage de 2 places vers la droite) renvoie la valeur 12, sa valeur binaire est "00 1100".
L'autre cas impliquant print >>obj, "Hello World"
est la syntaxe "print chevron" pour l' print
instruction en Python 2 (supprimée en Python 3, remplacée par l' file
argument de la print()
fonction ). Au lieu d'écrire sur la sortie standard, la sortie est transmise à la obj.write()
méthode. Un exemple typique serait les objets fichier ayant une write()
méthode. Voir la réponse à une question plus récente: Double signe supérieur à Python .
Ce sont des opérateurs de décalage de bits qui existent dans de nombreux langages de programmation traditionnels, <<
sont le décalage vers la gauche et >>
le décalage vers la droite, ils peuvent être illustrés comme 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 |
Ce sont les opérateurs de quart
x << y Renvoie x avec les bits décalés vers la gauche de y places (et les nouveaux bits sur le côté droit sont des zéros). Cela revient à multiplier x par 2 ** y.
x >> y Renvoie x avec les bits décalés vers la droite de y places. C'est la même chose que // 'ing x par 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
<<
,>>
,&
,|
,~
et^
faire?