Integer Overflow in Python?

Posted by : MOnsDaR | Samstag, 13. Februar 2010 | Published in

Beruflich bedingt habe ich bisher fast ausschließlich Erfahrungen mit streng typisierten Sprachen wie C++ oder C# gesammelt.

Im Unterschied zu diesen Sprachen muss man bei Python den Datentyp einer Variable nicht angeben. Doch was passiert, wenn man eine Variable mit einem Integer füllt und diesen über 32bit hinaus befüllt?

Dank des Interactive Mode des Python-Interpreters kann man das schnell ausprobieren:

>>> testInt = 0xffffffff
>>> print testInt
4294967295              #maximum Integer with 32bit
>>> testInt = testInt + 1
>>> print testInt
4294967296              #Integer is now casted to float
>>> testInt = testInt * testInt
>>> print testInt
18446744073709551616    #float is nearly unlimited


Der oben dargestellte Code erstellt einen Integer mit maximalem Wert. Dieser Wert wird zur Kontrolle ausgegeben. Im weiteren Programm wird der Integer um 1 erhöht. Dies würde in Sprachen wie C++ zu einem Buffer Overflow führen. In Python allerdings wird der Wert fortan als float behandelt. Diese haben keinen wirklichen Maximalwert, wie auch im weiteren Programmverlauf zu sehen ist.

Übrigens:
Dasselbe Verhalten legt auch die Sprache PHP und sicherlich einige andere typenlose Sprachen an den Tag.

(0) Comments

Leave a Response