Integeroverflow

Integeroverflow

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 und damit 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 dies im Statusregister des Prozessors registriert; dieser Fall kann vom Programmierer festgestellt werden.

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 ProgrammierspracheC“: 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 duale Rechnung veranschaulicht den Ganzzahlüberlauf:

  11111111 (a)
+ 00000010 (b)
----------
 100000001 (Ergebnis)


Die vordere Eins, das neunte Bit, ist nicht in den 8 Bit des gewählten Datentypen enthalten. Betrachtet man nur diese 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.


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”