Ich merke, dass ich Dinge tun kann 2 << 5
, um 64 und 1000 >> 2
250 zu bekommen.
Auch kann ich verwenden >>
in print
:
print >>obj, "Hello world"
Was passiert hier?
Ich merke, dass ich Dinge tun kann 2 << 5
, um 64 und 1000 >> 2
250 zu bekommen.
Auch kann ich verwenden >>
in print
:
print >>obj, "Hello world"
Was passiert hier?
Antworten:
Ich denke, es ist eine wichtige Frage, die noch nicht beantwortet wurde (das OP scheint bereits über Schichtbetreiber Bescheid zu wissen). Lassen Sie mich versuchen zu antworten, der Operator >> in Ihrem Beispiel wird für zwei verschiedene Zwecke verwendet. In C ++ ist dieser Operator überladen. Im ersten Beispiel wird es als bitweiser Operator (Linksverschiebung) verwendet, während es im zweiten Szenario lediglich als Ausgabeumleitung verwendet wird. dh
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
In Python 3 ist es möglich, das Dateiargument direkt wie folgt anzugeben:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
__rshift__
und tatsächlich überschreiben __lshift__
.
Dies sind bitweise Verschiebungsoperatoren.
Zitat aus den Dokumenten :
x << y
Gibt zurück, x
wobei die Bits um y Stellen nach links verschoben sind (und neue Bits auf der rechten Seite sind Nullen). Dies entspricht dem Multiplizieren x
mit 2**y
.
x >> y
Gibt zurück, x
wobei die Bits um y Stellen nach rechts verschoben sind. Dies ist die gleiche wie Dividieren x
durch 2**y
.
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
und so weiter. Sie können sehen, wie es ohne Erklärungen funktioniert.
print >>obj, "Hello world"
2 << 5
und 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
Der tatsächliche Binärwert von 12 ist "00 1100", wenn wir die obige Anweisung ausführen. Die Linksverschiebung (2 Stellen nach links verschoben) gibt den Wert 48 zurück. Der Binärwert ist "11 0000".
48 >> 2
12
Der Binärwert von 48 ist "11 0000", nachdem die obige Anweisung ausgeführt wurde. Die Rechtsverschiebung (2 Stellen nach rechts verschoben) gibt den Wert 12 zurück. Der Binärwert ist "00 1100".
Der andere Fall print >>obj, "Hello World"
ist die "print chevron" -Syntax für die print
Anweisung in Python 2 (in Python 3 entfernt, ersetzt durch das file
Argument der print()
Funktion ). Anstatt in die Standardausgabe zu schreiben, wird die Ausgabe an die obj.write()
Methode übergeben. Ein typisches Beispiel wären Dateiobjekte mit einer write()
Methode. Siehe die Antwort auf eine neuere Frage: Doppelt größer als in Python anmelden .
Sie sind Bitverschiebungsoperatoren, die in vielen gängigen Programmiersprachen existieren, <<
die Linksverschiebung und >>
die Rechtsverschiebung sind. Sie können wie in der folgenden Tabelle gezeigt werden. Nehmen Sie an, dass eine Ganzzahl nur 1 Byte im Speicher benötigt.
| 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 |
Dies sind die Schichtoperatoren
x << y Gibt x zurück, wobei die Bits um y Stellen nach links verschoben sind (und neue Bits auf der rechten Seite sind Nullen). Dies entspricht dem Multiplizieren von x mit 2 ** y.
x >> y Gibt x zurück, wobei die Bits um y Stellen nach rechts verschoben sind. Dies ist dasselbe wie // x x 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
<<
,>>
,&
,|
,~
, und^
tun?