2016-07-10 9 views
2

In der Python-Dokumentation für Python 3.5 https://docs.python.org/3/library/stdtypes.htmlIst `<<` `pow (2, n)` in python 3?

Es wird gesagt, dass eine Linksverschiebung int << n-int * pow(2,n) gleichwertig ist, aber ohne Überlauf zu überprüfen.

Aber da Python automatisch Ganzzahlen zu Longs beliebiger Genauigkeit fördert, bedeutet das, dass es buchstäblich keinen Unterschied gibt (da es keinen Überlauf geben kann)?

+3

Nicht sicher über Überläufe, aber sie sind unterschiedlich für '4 * pow (2, -1)' und '4 << -1' – TessellatingHeckler

+0

@TesselingHeckler" Negative Shift-Zählungen sind illegal und verursachen ein ValueError ausgelöst werden. " –

+0

@EliSadoff während pow (2, -1) ist in Ordnung, daher sind sie anders. Wenn die Frage lautet "Bedeutet das, dass es buchstäblich keinen Unterschied gibt", gibt es buchstäblich einen Unterschied – TessellatingHeckler

Antwort

1

Sie müssen sich in Python keine Gedanken über Überläufe machen, es sei denn, Sie verwenden Operationen, die Datentypen umfassen, die übergelaufen sein können. Dies umfasst nicht die eingebauten Zahlentypen von Python (int, float, long, complex).

Für positive Werte von n gilt die Dokumentation. Der Grund dafür, dass diese Überlaufprüfung ausgeführt wird, liegt darin, dass externe Bibliotheken, insbesondere solche, die in C implementiert sind, einem Überlauf unterliegen, wenn eine solche Überprüfung nicht durchgeführt wird. Wie in der Dokumentation zu pow erwähnt, entspricht dies auch int * (2**n).