[ < ] [ globale Übersicht ] [ Kapitelübersicht ] [ Stichwortsuche ] [ > ]



3.4.1 INTEGER-Zahlensysteme:

Am besten stellt man Integerzahlen in Binärschreibweise der Form: dN-1dN-2...d2d1d0 dar. Diese Zahlen können leicht vom Computer verarbeitet, und auch mit folgender Formel ins Dezimalsystem umgerechnet werden:

\begin{equation}
\label{eqn:01.1}
      d_{N-1} d_{N-2} \cdots d_{2} d_{1} d_{0} \quad\doteq\quad
      \sum_{j=0}^{N-1} d_{j}\cdot 2^{j}, \qquad  d_j \in \{0,1\}.
\end{equation}
Beispiele:

0000...0000 $\doteq$0
0000...0001 $\doteq$ 1
$\cdots$
1111...1111 $\doteq$ 2N - 1

Damit werden alle positiven Zahlen von 0 bis 2N - 1 dargestellt. N ist Element der natürlichen Zahlen und gibt die Anzahl der Binärziffern an (d0 bis dN-1). Man kann auch sagen, es gibt die Anzahl der Bits an, die verwendet werden, um eine Zahl darzustellen.
Man nennt jene Speicherzelle, in der genau eine binäre Ziffer abgespeichert werden kann, ein Bit. Dieser Name leitet sich von "binary digit" ab.
Warum gerade 2N - 1 wird sich vielleicht jemand fragen. Eine Stelle im Binärsystem entspricht ja einem Bit, mit dem man 2 Zahlen darstellen kann, und zwar 0 und 1. Mit 2 Bit kann man 4 (= 22) Zahlen darstellen: 002$\doteq$010, 012$\doteq$110, 102$\doteq$210 und 112$\doteq$310. Mit N Bit kann man 2N Zahlen darstellen. Nun kann man sich leicht ein einfaches Beispiel überlegen:
Angenommen N = 3. Dann ist die kleinste darstellbare Binärzahl gleich 000. Ins Dezimalsystem umgerechnet ergibt das die Zahl 0. Die größte darstellbare Binärzahl 111 ins Dezimalsystem umgerechent ergibt die Zahl 7, und 7 = 2 * 2 * 2 - 1 = 23 - 1 = 8 - 1. Das sind also 23 = 8 Zahlen, die dargestellt werden können.
Bei 32-Bit-Zahlen können also maximal 232 $\doteq$ 4294967296 (in Worten: über 4Mrd.) Zahlen dargestellt werden.
Es müssen auch negative Zahlen darstellbar sein. Das geschieht auf 3 Arten: Getrennte Codierung des Vorzeichens, Einerkomplement- und Zweierkomplementdarstellung. Folgende Variablen werden für die Zahlendarstellungen verwendet: dj, v $\in$ {0,1}, j $\in$ N, v = Vorzeichen.



Getrennte Codierung des Vorzeichens:

Das Vorzeichen v wird dazu verwendet um zu zeigen, ob die angegebene Binärzahl dN-2...d0 positiv ist, das ist der Fall bei v = 0 oder negativ, bei v = 1.

$$
vd_{N-2}d_{N-3} \cdots d_2 d_1 d_0 \quad\doteq\quad (-1)^v
\sum\limits_{j=0}^{N-2}d_j\cdot2^j.
$$
Man erhält damit die ganzen Zahlen [-(2N-1 - 1), 2N-1 - 1] $\subset$ Z:

0000...0000 $\doteq$01000...0000 $\doteq$-0
0000...0001 $\doteq$11000...0001 $\doteq$-1
$\cdots$$\cdots$
0111...1111 $\doteq$ 2N-1 - 11111...1111 $\doteq$ -(2N-1 - 1)


Wie man sieht, ist die Codierung der Zahl 0 nicht eindeutig (±0). Die größte darstellbare Zahl hat nur mehr den Wert 2N-1 - 1, und die kleinste den Wert -(2N-1 - 1). 2N-1 kommt daher, da die 1.Stelle das Vorzeichen repräsentiert, und daher ein Bit weniger zur Darstellung der eigentlichen Zahl zur Verfügung steht.



Einerkomplement
:

Formel zur Darstellung der positiven Zahlen:
Dazu wird die Formel (1.1) verwendet.

Formel zur Darstellung der negativen Zahlen:

$$\overline{x}=\sum\limits_{j=0}^{N-1}(1-d_j)\cdot2^j$$

Man erhält wieder die ganzen Zahlen [-(2N-1 - 1), 2N-1 - 1] $\subset$ Z:

0000...0000 $\doteq$01111...1111 $\doteq$-0
0000...0001 $\doteq$11111...1110 $\doteq$-1
$\cdots$$\cdots$
0111...1111 $\doteq$ 2N-1 - 11000...0000 $\doteq$ -(2N-1 - 1)


Die Codierung der Zahl 0 ist auch hier nicht eindeutig (±0).
Die negativen Zahlen, dargestellt im rechten Teil des obigen Beispiels, unterscheidet sich von den positiven im linken Teil dadurch, daß Nullen und Einser vertauscht sind. Dieses Komplement erhält man durch (1 - dj), da 1 - 0 = 1 und 1 - 1 = 0 ist. Positive und negative Zahlen können am führenden Bit (dN-1) unterschieden werden.



Zweierkomplementdarstellung
:

Formel zur Darstellung der positiven Zahlen:
Dazu wird wieder die Formel (1.1) verwendet, wie auch beim Einerkomplement.

Formel zur Darstellung der negativen Zahlen:

$$ \overline{\overline{x}} = 1+\sum\limits_{j=0}^{N-1}(1-d_j)\cdot2^j $$

Beispiele:

0000...0000 $\doteq$0
0000...0001 $\doteq$11111...1110 $\doteq$-1
$\cdots$$\cdots$
0111...1111 $\doteq$ 2N-1 - 11000...0001 $\doteq$ -(2N-1 - 1)
1000...0000 $\doteq$ -2N-1


Die Codierung der Zahl 0 ist eindeutig, das wird durch das 1 plus der Summe erreicht, allerdings ist jetzt der Zahlenbereich [-2N-1, 2N-1 - 1] unsymmetrisch.
Die Binärzahlen und deren Wert unterscheiden sich beim Einer- und Zweierkomplement um eine Binärziffer bzw. um den Wert 1. Daher kann man auch die einzelnen Bits mittels des Einerkomplements umwandeln und anschließend 1 addieren.
Eine andere Alternative zur Umrechnung in Zweierkomplement ist, die binären Ziffern von rechts nach links bis zur ersten 1 einschließlich zu kopieren und die restlichen Ziffern zu komplementieren. Positive und negative Zahlen können wieder am führenden Bit unterschieden werden.


Beispiel:

Intel:Die Intel-Mikroprozessoren haben Zweierkomplement-Codierungen der ganzen Zahlen mit Formatbreiten N = 16, 32 und 64 Bits, die als short integer, word integer und long integer bezeichnet werden. Der Bereich der Word-integer-Zahlen ist [-231,231 - 1] = [-2.147.483.648, 2.147.483.647] $\subset$ Z.



Datentyp INTEGER:


Integer-Zahlen sind Teilmengen der ganzen Zahlen. Operationen, die auf Integer-Zahlen angewendet werden können sind: +, -, *, div, mod und abs. imin $\le$ 0 ist die kleinste Zahl und imax > 0 ist die größte ganze Zahl. Zum Beispiel imin = 0 entspricht die Menge der nichtnegativen ganzen Zahlen. Bei einer symmetrische Codierung entspricht imin = -imax, andernfalls spricht man von einer unsymmetrsichen Codierung. Im besonderen gilt imin = -(imax + 1) bei der Codierung negativer Zahlen durch das Zweierkomplement:
imin = -2N-1, imax = 2N-1 - 1:
imin = -((2N-1 - 1) + 1) = -2N-1


Beispiel:

C: Auf HP-Workstation-Implementierungen der Programmiersprache C gibt es folgende INTEGER-Zahlensysteme:

Datentyp iminimax
unsigned short int065 535
short int-32 768 32 767
unsigned int 04 294 967 295
int -2 147 483 6482 147 483 647
unsigned long int04 294 967 295
long int-2 147 483 6482 147 483 647

Die Datentypen int und long int sind beide mit einer Formatbreite N = 32 Bit codiert. Der Datentyp long int hat somit keine größere Zahlenmenge als der Datentyp int.



Modulo-Arithmetik:


Wenn der Zahlenbereich [imin , imax ] nicht ausreicht (integer overflow), dann kommt entweder eine Fehlermeldung, oder die Zahl wird Modulo gerechnet.
xwrap$\in$ [imin , imax ],
xwrap$\equiv$ x mod m,
m := imax - imin + 1.
Da imin kleiner gleich 0 ist, ist -imin positiv. Der Wert von m ist die Anzahl der Zahlen im Wertebereich [imin, imax]. Die Summe der Absolutbeträge von imin und imax ergeben nur 2N-1 Zahlen, da die Zahl Null nicht miteingerechnet wurde. Darum muß man am Schluß der Berechnung von m noch 1 dazuzählen.


Beispiele:


[ < ] [ globale Übersicht ] [ Kapitelübersicht ] [ Stichwortsuche ] [ > ]