next up previous
Nächste Seite: Gleitkommazahlen Aufwärts: Charakteristik verschiedener Typen Vorherige Seite: Charakteristik verschiedener Typen

Ganze Zahlen

Da die Prozessoren der M68000-Familie eine Registerbreite von 32 Bit haben, werden auch Rechengrössen dieser Grösse angeboten. Die entsprechenden Typen heissen LONGINT bzw. LONGCARD. Der LONGINT-Bereich umfasst alle Zahlen im von -2147483648 ($-2^{31}$) bis 2147483647 ($2^{31}-1$), der LONGCARD-Bereich geht von 0 bis 4294967295 ($2^{32}-1$).

Zudem werden auch die Typen SHORTINT und SHORTCARD angeboten, die jeweils den Wertebereich von -128 bis 127 bzw. 0 bis 255 umfassen. Variablen dieses Typs belegen folglich ein Byte im Speicher, beachten Sie allerdings auch den Unterabschnitt 5.5.7, Anordnung von Typen und Variablen.

Zahlen-Konstanten, wie zum Beispiel 0 oder -4009, haben an sich keinen bestimmten Typ. Der Compiler weiss lediglich, dass es sich um skalare Zahlen handelt. Erst wenn sie in Rechnungen gebraucht oder einer Variablen zugewiesen werden, erhalten sie einen Typ. Bei Zuweisungen wird natürlich kontrolliert, ob diese Konstante überhaupt in dieser Variablen Platz hat. In verschiedenen anderen Systemen wird eine ,,lange Zahl`` mit einem D hinter der Zahl gekennzeichnet, z.B. 12D wäre die LONGCARD-Konstante 12. Dies ist in nicht zulässig, aber auch nicht nötig.

In diesem Zusammenhang sei eine vor allem für Numeriker wichtige Anmerkung zu den Operatoren DIV und MOD erwähnt. Die mathematische Definition des Rests und der ganzzahligen Division lautet:


\begin{displaymath}x \mbox{~DIV~} y = q \quad:\quad q \le x / y \end{displaymath}



\begin{displaymath}x \mbox{~MOD~} y = r \quad:\quad 0 \le r < y \mbox{~f\uml {u}r~} y > 0\mbox{~;~}
\ y < r \le 0 \mbox{~f\uml {u}r~} y < 0 \end{displaymath}

Dabei muss immer gelten:

\begin{displaymath}q \ast y + r = x \end{displaymath}

Diese Bedingungen sind bei den meisten Implementationen nicht erfüllt. So ist bei negativen Divisoren das Resultat der ganzzahligen Division grösser als der Quotient (näher bei Null) und der Rest hat das Vorzeichen des Dividends statt des Divisors. Die Operatoren DIV und MOD führen im die numerisch sauberen Operationen durch. Wird jedoch einmal die alte Definition benötigt, können die Operatoren ``/`` und REM verwendet werden. Der ``/-Operator hat bei Zahlen des Typs REAL, LONGREAL oder FFP die gewohnte Bedeutung der Division. Um die Unterschiede deutlich vor Augen zu führen, sollen die Tabellen 5.1 und 5.2 dienen. Dabei fällt vor allem die Symmetrie bei der alten Definition auf. Die korrekte Lösung hat keine Symmetrie, ist aber kontinuierlich.


Tabelle 5.1: Operatoren DIV und MOD
i: i DIV 3 i MOD 3 i DIV -3 i MOD -3
4: 1 1 -2 -2
3: 1 0 -1 0
2: 0 2 -1 -1
1: 0 1 -1 -2
0: 0 0 0 0
-1: -1 2 0 -1
-2: -1 1 0 -2
-3: -1 0 1 0
-4: -2 2 1 -1



Tabelle 5.2: Operatoren / und REM
i: i / 3 i REM 3 i / -3 i REM -3
4: 1 1 -1 1
3: 1 0 -1 0
2: 0 2 0 2
1: 0 1 0 1
0: 0 0 0 0
-1: 0 -1 0 -1
-2: 0 -2 0 -2
-3: -1 0 1 0
-4: -1 -1 1 -1



next up previous
Nächste Seite: Gleitkommazahlen Aufwärts: Charakteristik verschiedener Typen Vorherige Seite: Charakteristik verschiedener Typen
Claudio Nieder 2000-11-12