Ganzzahlüberlauf
aus Wikipedia, der freien Enzyklopädie
Ein Ganzzahlüberlauf (englisch integer overflow) tritt auf, wenn ein Computer Berechnungen mit begrenzter Stellenzahl durchführt und das Rechenergebnis zur Darstellung mehr Stellen erfordert. Die Stellenanzahl bzw. der Wertebereich ist durch das Rechenwerk begrenzt.
Das Rechenwerk heutiger Computer ist meist für 32 oder 64 Binärstellen ausgelegt. Tritt hier ein Ganzzahlüberlauf auf, so wird eine Anzeige im Statusregister des Prozessors gesetzt, die vom Programmierer geprüft werden kann.
Ein anderer Fall liegt vor, wenn ein Rechenergebnis in einer Variablen gespeichert wird, die weniger Stellen als das Rechenwerk aufweist. Dieser Fall wird vom Prozessor nicht automatisch erkannt, die Variable erhält einen falschen Wert.
Erst durch die Verwendung von Funktionsbibliotheken ist es möglich, Berechnungen mit Millionen von Stellen durchzuführen ohne einen Ganzzahlüberlauf zu erreichen.
Ein Beispiel aus der Programmiersprache "C": Der Datentyp unsigned char umfasst 8 Bit. Sein Wertebereich reicht von 0 bis 255.
unsigned char a = 255; unsigned char b = 2; unsigned char Ergebnis = a + b;
Die zugehörige binäre Rechnung veranschaulicht den Ganzzahlüberlauf:
11111111 (a) +00000010 (b) -------- 100000001 (Ergebnis)
Die vordere Eins "fällt" aus den 8 Bit raus. Betrachtet man nur die letzten 8 Bit, so erhält man 00000001, also 1 und nicht 257. Selbst wenn zur Übersetzung des Programmcodes die Zahlenwerte festehen, ignorieren manche C-Compiler diese Überläufe, was zu falschen Ergebnissen führt. Daher sollte der Datentyp immer ausreichend groß gewählt werden.
Bei der plattformunabhängigen Programmierung sollte der Ganzzahlüberlauf nicht absichtlich benutzt werden, da der Wertebereich der Datentypen, und damit der Punkt des Überlaufs, auf den Zielsystemen unterschiedlich sein kann.