Digitaltechnik_Roethig/Kapitel/03_SWS.tex
Andre Meyering 61826edcf0 [SWS] Fix -19 -> -13
Kleiner Fehler. Auch der Übertrag fehlte.
2022-03-11 10:32:43 +01:00

924 lines
35 KiB
TeX

\chapter{\acl{SWS}}\index{Stellenwertsysteme}
\acf{SWS} sind gekennzeichnet durch eine Basis $b$, wobei $b \in \mathbb{N}\setminus\{0,1\}$. \newline
Der Aufbau einer n-stelligen Zahl ist: $z_{n-1}, z_{n-2}, \ldots, z_2, z_1, z_0$ mit $z \in \{k-1, \ldots, 0\}$. \newline
Der Wert der Zahl ist die Summe aus $Ziffernwert (Symbolwert) \times Stellenwert$
$\text{Anzahl(Symbole)} = b$ ($b$ = Basis, bei dezimal $b = 10$) \newline
Wert(kleinstwertigstes Symbol) = $0$ \newline
Wert(höchstwertigstes Symbol) = $b - 1$
$\Rightarrow$ $b \in \mathbb{N} \setminus \{0,1\}$ \dash $b > 1$ bzw. $b \geq 2$ \newline
$\Rightarrow$ Es gibt unendlich viele (aber abzählbar viele) \acl{SWS}
\begin{tabular}{rlll}
\textbullet & Dezimalsystem & $b = 10$ & $\text{Symbolmenge} \, \{0,1,2,3,4,5,6,7,8,9\}$ \\
\textbullet & Dual-/Binärsystem & $b = 2$ & $\text{Symbolmenge} \, \{0,1\}$\\
\textbullet & Hexadezimalsystem & $b = 16$ & $\text{Symbolmenge} \,\{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F\}$ \\
\textbullet & Oktalsystem: & $b = 8$ & $\text{Symbolmenge} \, \{0,1,2,3,4,5,6,7\}$ \\
\textbullet & Tetralsystem: & $b = 4$ & $\text{Symbolmenge} \, \{0,1,2,3\}$
\end{tabular}
\begin{Hinweis}
Die Bestimmung von Werten in Stellenwertsystemen kann über folgende Formel erfolgen:
\begin{equation}
\label{eq:umrechnung_b_zu_10}
Wert(z_{n-1}, z_{n-2}, \ldots, z_1, z_0) = \sum\limits_{i=0}^{n-1} |z_i| \cdot b^i = z_{n-1} \cdot b^{n-1} + z_{n-2} \cdot b^{n-2} + \ldots + z_1 \cdot b^1 + z_0 \cdot b^0
\end{equation}
\end{Hinweis}
\textit{Hinweis}: Es gibt unendlich viele \acl{SWS}.
\section{Umrechnung verschiedener Basen}\index{Umrechnung}
\subsection{Umrechnung von $b$ nach $b=10$}
Die Umrechnung von einer beliebigen Basis $b$ zur Basis $b=10$ (\enquote{Dezimalsystem}) kann über die Formel \ref{eq:umrechnung_b_zu_10} erfolgen.
\textbf{Beispiel}
\begin{equation}
\begin{aligned}
11010_2 & = 0\cdot 2^0 + 1\cdot 2^1 + 0\cdot 2^2 + 1\cdot 2^3 + 1\cdot 2^4 \\
& = 26_{10}
\end{aligned}
\end{equation}
\subsection{Umrechnung von $b_1=10$ nach $b$ (beliebiges System)}
Die Umrechnung vom Dezimalsystem in ein anderes System funktioniert durch Ganzzahldivision und Restebildung (Division durch Zielbasis).
\textbf{$26_{10} = ?_2$ mit $b_2=2$}
\columnratio{0.4}
\begin{paracol}{2}
\begin{equation*}
\begin{aligned}
26:2 &= 13 & R0 \rightarrow z_0 \\
13:2 &= 6 & R1 \rightarrow z_1 \\
6:2 &= 3 & R0 \rightarrow z_2 \\
3:2 &= 1 & R1 \rightarrow z_3 \\
1:2 &= \textcolor{red}{0} & R1 \rightarrow z_4 \\
0:2 &= \textcolor{red}{0} & R0 \rightarrow z_5
\end{aligned}
\end{equation*}
\switchcolumn
Die Abbruchbedingung ist erfüllt, wenn die Division $0$ ergibt.
Weitere Durchläufe sind möglich, führen jedoch nur zu führenden Nullen.
Das Ergebnis ist somit $26_{10}=11010_2$.
\end{paracol}
\textbf{Beispiel $42_{10} = ?_7$ mit $b_2=7$}
\columnratio{0.55}
\begin{paracol}{2}
\begin{equation*}
\begin{aligned}
42:7 &= 6 & R0 \rightarrow z_0 \\
6:7 &= \textcolor{red}{0} & R6 \rightarrow z_1
\end{aligned}
\end{equation*}
\switchcolumn
Das Ergebnis ist somit $42_{10}=60_7$.
\textbf{Probe}: $60_7=0\cdot 7^0 + 6\cdot 7^1 = 42_{10}$ \textcolor{green}{\Large{$\checkmark$}}
\end{paracol}
\textbf{Beispiel $0815_{10} = ?_8$ mit $b_2=8$}
\columnratio{0.55}
\begin{paracol}{2}
Umrechnung von Dezimalsystem in Oktalsystem.
\begin{equation*}
\begin{aligned}
815:8 &= 101 & R7 \rightarrow z_0 \\
101:8 &= 12 & R5 \rightarrow z_1 \\
12:8 &= 1 & R4 \rightarrow z_2 \\
1:8 &= \textcolor{red}{0} & R1 \rightarrow z_3 \\
\end{aligned}
\end{equation*}
\switchcolumn
Das Ergebnis ist somit $815_{10}=1457_8$.
\begin{flalign*}
& \textbf{Probe}: & & 7\cdot 8^0 + 5\cdot 8^1 + 4\cdot 8^2 + 1\cdot 8^3 & \\
& & = & 7 + 40 + 256 + 512 & \\
& & = & 815 \textcolor{green}{\Large{\checkmark}} &
\end{flalign*}
\end{paracol}
\textbf{Hinweis:} Bei Klausuren den Rechenweg mit aufschreiben. Dies wird fast immer gefordert!
\subsection{Gängige Basen}
\begin{tabular}{rlll}
\textbullet & $b = 10$ & \enquote{Dezimalsystem} & $z \in \{0,1,2,3,4,5,6,7,8,9\}$ \\
\textbullet & $b = 2$ & \enquote{Binärsystem} & $z \in \{0,1\}$ \\
& \multicolumn{3}{l}{$\Rightarrow$ Computer stellen Zahlen im Binärsystem dar und rechnen im Binärsystem} \\
\textbullet & $b = 8$ & \enquote{Oktalsystem} & $z \in \{0,1,2,3,4,5,6,7\}$ \\
\textbullet & $b = 16$ & \enquote{Hexadezimalsystem} & $z \in \{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F\}$ \\
& \multicolumn{3}{l}{$\Rightarrow$ Wert von $|A| = 10$, $|B| = 11$, $|C| = 12$, $|D| = 13$, $|E| = 14$, $|F| = 15$} \\
\end{tabular}
\subsection{Umrechnung von $b_1$ nach $b_2$ ($b_1\neq 10 \wedge b_2\neq 10$)}
Die Umrechnung von einer Basis $b_1$ in eine andere Basis $b_2$ ($b_1 \neq 10$, $b_2 \neq 10$) findet üblicherweise über das Dezimalsystem statt, also in 2 Schritten!
Eine direkte Umrechnung wäre über die Ganzzahldivision durch $b_2$ möglich, wenn wir diese Umrechnung im System zur Basis $b_1$ durchführen würden.
Eine direkte Umrechnung ist auch in Spezialfällen möglich, nämlich dann, wenn die eine Zahl eine Potenz der anderen ist (\zB $b_1=2$ und $b_2=16$, vgl.~\autoref{tbl:hexToDez}).
\begin{itemize}[noitemsep]
\item $2^4=16$ \dash 4 Stellen im Binärsystem entsprechen einer Stelle im Hexadezimalsystem
\item $2^3=8 $ \dash 3 Stellen im Binärsystem entsprechen einer Stelle im Oktalsystem
\end{itemize}
\begin{table}
\centering
\begin{tabular}{c|c|c}
Ziffer & Wert & Binär \\
\midrule
0 & 0 & 0000 \\
1 & 1 & 0001 \\
2 & 2 & 0010 \\
3 & 3 & 0011 \\
4 & 4 & 0100 \\
5 & 5 & 0101 \\
6 & 6 & 0110 \\
7 & 7 & 0111 \\
\end{tabular}
\begin{tabular}{c|c|c}
Ziffer & Wert & Binär \\
\midrule
8 & 8 & 1000 \\
9 & 9 & 1001 \\
A & 10 & 1010 \\
B & 11 & 1011 \\
C & 12 & 1100 \\
D & 13 & 1101 \\
E & 14 & 1110 \\
F & 15 & 1111 \\
\end{tabular}
\caption{Werte im Hexadezimalsystem}
\label{tbl:hexToDez}
\end{table}
\subsection[Andere Basen bei Computern]{Wozu das Oktal- bzw. Hexadezimalsystem in \textit{computernahen} Umgebungen?}
\begin{itemize}[noitemsep]
\item 3 (bzw. 4) Ziffern im Binärsystem entsprechen einer Ziffer im
Oktal- bzw. Hexadezimalsystem
\item einfache stellenweise Umrechnung
\item deutlich bessere Übersichtlichkeit
\end{itemize}
\vspace{-6mm}
\begin{align*}
\underbrace{0011}_{3} \underbrace{1100}_{C} \underbrace{1010}_{A} \underbrace{1111_2}_{F_{16}}
& \qquad &
\underbrace{011}_{3} \underbrace{110}_{6} \underbrace{010}_{2} \underbrace{101}_{5}\underbrace{111_2}_{7_8}
\end{align*}
\subsection{Umwandlung in andere \acs{SWS}}
Eine direkte Umwandlung ist auch möglich, wenn $b_1 = b^{n}$ und $b_{2}=b^{m}$ \newline
(es gibt ein $b$ mit $b_1=b^n$, $b_2=b^m$, $n,m \in \mathbb{N}, b \in \mathbb{N}\setminus\{1\}$)
\begin{paracol}{2}
\textbf{Beispiel}: Oktal und Hexadezimalsystem:
\hspace*{6mm} $b_1=8=2^3$ \newline
\hspace*{6mm} $b_2=16=2^4$
\switchcolumn
\begin{displaymath}
\begin{aligned}
b_1^n &= b_2^m \\
8^4 &= 16^3 \\
2^{3^4} &= 2^{4^3} \\
2^{12} &= 2^{12} \textcolor{green}{\Large{\checkmark}}
\end{aligned}
\end{displaymath}
\end{paracol}
$\Rightarrow$ 4 Stellen im Oktalsystem entsprechen 3 Stellen im Hexadezimalsystem.
$\Rightarrow$ dann ist direkt eine Umrechnung der Ziffernblöcke möglich!
Wenn $b_1^n = b_2^m$, dann entsprechen $n$ Stellen im System zur Basis $b_1$ genau $m$ Stellen im System zur Basis $b_2$ \newline
$\Rightarrow$ dann auch Umrechnung über Tabelle mit $b_1^n$ oder $b_2^m$ [Bei Oktal $\Leftrightarrow$ Hexdezimal: $4096$ ($2^{4^3}$)] Zeilen möglich $\Rightarrow$ zu Groß für Erstellung der Tabelle. Deshalb wieder Umrechnung über Zwischensystem, aber nicht in das Dezimalsystem, sondern in das System zur Basis $b$ mit $b^m=b_1$ und $b^n=b_2$
\section{Bewertung Stellenwertsysteme}
\begin{itemize}[noitemsep]
\item $\oplus$ Übersichtlichkeit der Zahlendarstellung ist deutlich besser als bei Abzählsystemen (exponentielles Wachstum mit der Basis vs. lineares Wachstum mit Wert des höchstwertigen Symbols). Wird erst unübersichtlich ab $\sim b^{10}$
\item $\pm$ erhöhte Komplexität, bis das System verstanden wurde. Danach ist der Umgang mit dem System gut möglich.
\item $\oplus$ unbeschränkter Wertebereich (auch Erweiterung auf negative, nicht ganze Zahlen,\ldots)
\item $\oplus$ alle Grundrechenarten (Addition, Subtraktion, Multiplikation, Division) sind mit moderatem Aufwand und mäßig komplexen Verfahren machbar
\item $\ominus$ Übersichtlichkeit sinkt mit steigender Anzahl veschiedener/voneinander zu unterscheidener Symbole und damit mit der Basis. \newline
$\Rightarrow$ das Ganze ist also auch eine Sache der Gewohnheit!
\end{itemize}
\section{Darstellung negativer Zahlen}
\subsection{Betrag und Vorzeichen}
$ 42 \rightarrow -42$ bzw. $+42 \rightarrow -42$ (positives Vorzeichen wird [meist] weggelassen) \newline
Nachteil: Addition von negativen Zahlen benötigt ein anderes Verfahren
als die Addition von Positiven Zahlen (unpraktisch für Computer).
\subsection{\href{https://de.wikipedia.org/wiki/Einerkomplement}{\textbf{Einerkomplement}}}\index{Einerkomplement}
Die erste \enquote{Ziffer} gibt das Vorzeichen an ($0 \overset{\wedge}{=} positiv$, $1 \overset{\wedge}{=} negativ$), der Rest der Ziffern ist bei negativen Zahlen der komplementierte Betrag in Binärdarstellung (komplementiert: $1=\lnot 0$ und $0=\lnot 1$, also \enquote{invertiert}) \newline
\textit{Wichtig}: Vorher genaue Stellenanzahl festlegen (wegen \enquote{erste Ziffer}).
\pagebreak
\textbf{Beispiel}: 1. Umcodierung ins Binärsystem
\begin{paracol}{2}
\begin{equation*}
\begin{aligned}
42:2 &= 21 & R0 \rightarrow z_0 \\
21:2 &= 10 & R1 \rightarrow z_1 \\
10:2 &= 5 & R0 \rightarrow z_2 \\
5:2 &= 2 & R1 \rightarrow z_3 \\
2:2 &= 1 & R0 \rightarrow z_4 \\
1:2 &= \textcolor{red}{\textbf{0}} & R1 \rightarrow z_5 \\
& 42_{10} = 101010_2
\end{aligned}
\end{equation*}
\switchcolumn
\begin{equation*}
\begin{aligned}
13:2 &= 6 & R1 \rightarrow z_0 \\
6:2 &= 3 & R0 \rightarrow z_1 \\
3:2 &= 1 & R1 \rightarrow z_2 \\
1:2 &= \textcolor{red}{\textbf{0}} & R1 \rightarrow z_3 \\
& 13_{10} = 1101_2
\end{aligned}
\end{equation*}
\end{paracol}
\begin{tabular}{rllll}
\textbullet & $42_{10} $ & $ = 101010_2 $ & $= 0101010_2$ & (mit Vorzeichen)\\
\textbullet & $13_{10} $ & $ = 1101_2 $ & $= 0001101_2$ & (mit Vorzeichen, auch sieben Stellen)\\
\textbullet & $-42_{10} $ & & $ = 1010101_2$ & (1er-Komplement)\\
\textbullet & $-13_{10} $ & & $ = 1110010_2$ & (1er-Komplement)\\
\end{tabular}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\textbf{\textsf{Addition:}}
Für die Addition der beiden obigen Zahlen reichen 7 Stellen im Binärsystem aus (da $42+13 < 2^6 \Leftrightarrow 55 < 64$).
\medskip
\columnratio{0.3}
\begin{paracol}{2}
\begin{tabular}{l|c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c}
\enskip $-42$ & & 1 & 0 & 1 & 0 & 1 & 0 & 1 \\
\enskip $+13$ & + & 0 & 0 & 0 & 1 & 1 & 0 & 1 \\
Übertrag & & & 1 & 1 & 1 & & 1 & \\
\hline
& & \textcolor{blue}{\textbf{1}} & 1 & 0 & 0 & 0 & 1 & 0
\end{tabular}
\switchcolumn
Da die erste Ziffer eine \textbf{\textcolor{blue}{1}} ist, handelt es sich um eine negative Zahl.
Deshalb muss vom Ergebnis nun noch das 1er-Komplement gebildet werden. ist.
$=0011101 = \textbf{29} \rightarrow$ Das Ergebnis ist $-29$
\end{paracol}
\columnratio{0.3}
\begin{paracol}{2}
\begin{tabular}{lc@{\,}|c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c}
\enskip $+42$ & & & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\
\enskip $-13$ & & + & 1 & 1 & 1 & 0 & 0 & 1 & 0 \\
Übertrag & & 1 & 1 & & & & 1 & & \\
\hline
& & \textcolor{red}{\textbf{1}} & \uline{\textcolor{blue}{\textbf{0}}} & 0 & 1 & 1 & 1 & 0 & 0
\end{tabular}
\switchcolumn
Die rote \textcolor{red}{1} wird ignoriert, weil sie nicht in den 7 Stellen enthalten ist.
Da die Zahl positiv ist (siehe \uline{\textcolor{blue}{0}}), muss kein Komplement gebildet werden.
$=0011100 = \textbf{28}$
Hieran erkennt man auch schon den ersten Nachteil des 1er-Komplements: In manchen Fällen ist die Addition offenbar nicht ganz korrekt!
\end{paracol}
In der 1er-Komplement-Darstellung gibt es zudem zwei verschiedene Darstellungen der $0$. Einmal \enquote{$+0$}~$=00000$ und einmal \enquote{$-0$}~$=11111$ (zweiter Nachteil).
\textbf{Hinweis}: Sicherheitshalber hätte man 8 Stellen nehmen können. Dies hätte am falschen Ergebnis jedoch nichts geändert.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\textbf{Wertebereiche}
\begin{enumerate}[noitemsep]
\item[a)] bei nicht-negativen, ganzen Binärzahlen mit n Stellen:
\begin{itemize}[noitemsep]
\item kleinste Zahl = 0
\item größte Zahl $= 111\ldots 111$ $(n \times "1") = 2^{n} - 1$
\item $\Rightarrow$ insgesamt $2^n$ verschiedene Zahlen, die dargestellt werden können
\end{itemize}
\item[b)] bei 1er-Komplement-Darstellung mit $n$ Stellen
\begin{itemize}[noitemsep]
\item größte Zahl $= 0111\ldots 111~((n-1) \times "1") = 2^{n-1} - 1$
\item kleinste Zahl $= 100\ldots 000 ((n-1) \times "0")\xrightarrow{\text{1er Komplement}} 0111\ldots 111 = 2^{n-1} - 1$\newline
$\Rightarrow -(2^{n-1} - 1) = -2^{n-1} + 1$
\item $\Rightarrow$ insgesamt $2^{n-1}$ positive Zahlen, $2^{n-1}$ negative Zahlen, sowie die Null, also insgesamt ($2^n - 1$) verschiedene Zahlen, \dash es ist ein Zahlenwert weniger als mit $n$ Stellen möglich, darstellbar (dritter Nachteil).
\end{itemize}
\end{enumerate}
\subsection{\href{https://de.wikipedia.org/wiki/Zweierkomplement}{Zweierkomplement}}\index{Zweierkomplement}
\textit{Bildungsregel}: Komplementierung aller Ziffern und nachfolgender Addition von \enquote{+1} (plus eins) auf das Komplement.
\begin{itemize}[noitemsep]
\item $42_{10} = 0101010_2 \xrightarrow{\text{1er Komplement}} 1010101_2 \xrightarrow{\text{plus 1}} 1010110 = -42_{10}$
\item $13_{10} = 0001101_2 \xrightarrow{\text{1er Komplement}} 1110010_2 \xrightarrow{\text{plus 1}} 1110011 = -13_{10}$
\end{itemize}
\bigskip
\begin{Hinweis}[frametitle={Wichtig für die Klausur}]
\begin{itemize}[noitemsep]
\item (Für das Binärsystem bei negativen Zahlen): Genügend Stellen verwenden (zur Not eine Stelle ungenutzt lassen).
\item \enquote{Welche Berücksichtigung mussten sie bei der Darstellung der Zahlen noch machen?} \newline
$\Rightarrow$ Betrag, Vorzeichen, \ldots
\end{itemize}
\end{Hinweis}
\bigskip
\columnratio{0.3}
\begin{paracol}{2}
\begin{tabular}{lc@{\,}|c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c}
\enskip $+42$ & & & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\
\enskip $-13$ & & + & 1 & 1 & 1 & 0 & 0 & 1 & 1 \\
Übertrag & & 1 & 1 & & & & 1 & & \\
\hline
& & \textcolor{red}{\textbf{1}} & \uline{\textcolor{blue}{\textbf{0}}} & 0 & 1 & 1 & 1 & 0 & 1
\end{tabular}
\switchcolumn
Die rote \textcolor{red}{1} wird ignoriert, weil sie nicht in den 7 Stellen enthalten ist.
Die Zahl ist positiv (siehe blaue \uline{\textcolor{blue}{0}}).
$=0011101 = 1 + 4 + 8 + 16 = \textbf{29}$
Im Gegensatz zum 1er Komplement ist die Addition in diesem Fall korrekt!
\end{paracol}
\bigskip
\columnratio{0.3}
\begin{paracol}{2}
\begin{tabular}{l|c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c}
\enskip $-42$ & & 1 & 0 & 1 & 0 & 1 & 1 & 0 \\
\enskip $+13$ & + & 0 & 0 & 0 & 1 & 1 & 0 & 1 \\
Übertrag & & & 1 & 1 & 1 & & & \\
\hline
& & \textcolor{blue}{\textbf{1}} & 1 & 0 & 0 & 0 & 1 & 1
\end{tabular}
\switchcolumn
Da die erste Ziffer eine \textcolor{blue}{\textbf{1}} ist, handelt es sich um eine negative Zahl.
Deshalb muss vom Ergebnis nun noch das Komplement gebildet werden und danach noch 1 aufaddiert werden.
1100011 $\Rightarrow$ 0011100 + 1 $\Rightarrow$ 0011101 $\Rightarrow 1 + 4 + 8 + 16 = 29 \Rightarrow \textbf{-29}$
\end{paracol}
\bigskip
\columnratio{0.3}
\begin{paracol}{2}
\begin{tabular}{l|c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c@{\,}c}
\enskip $-13$ & & 1 & 1 & 1 & 0 & 0 & 1 & 1 \\
\enskip $-42$ & + & 1 & 0 & 1 & 0 & 1 & 1 & 0 \\
Übertrag & 1 & 1 & 1 & & & 1 & & \\
\hline
& (1) & \textcolor{blue}{1} & 0 & 1 & 1 & 0 & 0 & 1
\end{tabular}
\switchcolumn
$1001001_2 \xrightarrow{\text{Komplement}} 0110110_2 \xrightarrow{\text{plus eins}} 0110111_2 \rightarrow 1+2+4+16+32=55_{10}$
Die blaue eins bedeutet, dass es sich um eine negative Zahl handelt. Somit ist das Endergebnis $-55_{10}$
\end{paracol}
\newpage
\begin{enumerate}[noitemsep]
\item Alle Additionsergebnisse sind korrekt \textcolor{green}{\cmark}
\item $-0 = ?$ \newline
Im 2er-Komplement: \newline
$00000000_2$ (positive null) $\xrightarrow{\text{1er~Komplement}} 11111111_2 \xrightarrow{\text{plus eins}} (1)\textcolor{blue}{0}0000000_2$ \newline
Es kommt eine positive \enquote{0} raus. Durch Addieren von eins verhindern wir das Auftreten zweier Nullen!
\item Wertebereich, Beispiel: 8-Stellig
größte Zahl: $\textcolor{blue}{0}1111111_2 = 1+2+4+8+16+32+64 = \textbf{127}$ \newline
kleinste Zahl:: $10000000_2 \xrightarrow{\text{invertieren (wird pos.) / 1er~Komplement}} 011111111 \xrightarrow{\text{plus 1}} \textcolor{red}{1}0000000$. Die rote $1$ ist in diesem Fall die positive $\textbf{128}$, nicht das Vorzeichen!
\item Insgesamt $2^8 = 256$ verschiedene Werte mit 8-Bit.
\item $\ominus$ Nachteil: unsymmetrischer Wertebereich, \dash für die kleinste
(betragsmäßig größte) negative Zahl gibt es kein positives \enquote{Äquivalent}
(eigentlich \enquote{Komplement} im Wertebereich)
\item Computer stellen (ganze) Zahlen (mit einem auch nicht-negativen Wertebereich)
meist im Zweier-Komplement dar.
\end{enumerate}
\section{Darstellung von nicht-ganzen Zahlen}
Darstellung von nicht-ganzen Zahlen (zunächst von nicht-negativen Zahlen). Im folgenden werden verschiedene Darstellungsmöglichkeiten gezeigt.
\subsection{Darstellung als Bruch}\index{Bruch}
$\frac{2}{3}$ oder $5\frac{1}{2}$
\begin{itemize}[noitemsep]
\item $\ominus$ Jede Zahl hat unendlich viele Darstellungen, \zB \newline
$\frac{1}{2} = \frac{2}{4} = \frac{3}{6} = \ldots $, $2 = \frac{2}{1} = \frac{4}{2} = \ldots $
\item $\ominus$ Viele reele Zahlen sind nicht darstellbar (die Zahlen, welche keine rationalen Zahlen sind)
\end{itemize}
\subsection{Festkommadarstellung}\index{Festkommadarstellung}
Neben den Ziffern gibt es ein weiteres Symbol, nämlich das \enquote{Komma} [\enquote{~,~}] (bzw. den Punkt [\enquote{~.~}] im englischen Sprachraum).
\begin{itemize}[noitemsep]
\item jede Zahl hat einen Vorkommaanteil (feste Anzahl $n$ an Vorkommaziffern) und einen Nachkommaanteil (feste Anzahl $m$ an Nachkommaziffern). Dazwischen steht \textit{genau ein} Komma.
\item Darstellung: $z_{n-1}z_{n-2}z_{n-3}\ldots z_{1}z_{0} ~\textbf{,}~ z_{-1}z_{-2}\ldots z_{-m+1}z_{-m}$
\end{itemize}
\subsubsection*{Formel zur Wertbestimmung}
\begin{itemize}[noitemsep]
\item Vorkommaanteil: $\sum_{i=0}^{n-1}|z_i|\cdot b^i$
\item Nachkommaanteil: $\sum_{i=1}^{m}|z_i|\cdot b^{-i}$
\item Zusammen: $\sum_{i=-m}^{n-1}|z_i|\cdot b^{i}$
\item auch wieder mit beliebigen Basen $b, b\in \mathbb{N}, b>1$ möglich, \zB
\begin{align*}
&1101,11001101_2 \\
&1_31_20_11_0,1_{-1}1_{-2}0_{-3}0_{-4}1_{-5}1_{-6}0_{-7}1_{-8} \\
&2^3+2^2+2^0+2^{-1}+2^{-2}+2^{-5}+2^{-6}+2^{-8} \\
=&8+4+1+\frac{1}{2}+\frac{1}{4}+\frac{1}{32}+\frac{1}{64}+\frac{1}{256} \\
=&13+\underbrace{0,80078125}_{\text{kann nie Übertrag geben}}\\
=&13,80078125
\end{align*}
\end{itemize}
\subsubsection*{Wertbestimmung in andere Richtung: $13,80078125_{10} = ?,?_2$}
Vor- und Nachkommaanteil können getrennt behandelt werden.
Im nächsten Beispiel wird die Zahl $13,80078125$ (siehe oben) verwendet.
\bigskip
\columnratio{0.65}
\begin{paracol}{2}
\textbf{Vorkommaanteil}: Ganzzahldivision und Restebildung durch die Zahlbasis.
Somit ist $13_{10} = 1101_2$. \textcolor{green}{\cmark}
\switchcolumn
\vspace*{-10mm}
\begin{align*}
13:2=6 & R1 \\
6:2=3 & R0 \\
3:2=1 & R1 \\
1:2=\textcolor{red}{0} & R1 \\
\end{align*}
\end{paracol}
\textbf{Nachkommaanteil}:
\begin{itemize}[noitemsep]
\item Multiplikation mit Zielbasis und Aufteilung in
Vor- und Nachkommaanteil
\item Vorkommaanteil ist nächste Nachkommastelle
\item Nachkommaanteil wird weiter bearbeitet
\end{itemize}
\begin{align*}
0,80078125\cdot 2 &= \underbrace{1}_{\text{1.~NKS}},\underbrace{6015625 }_{\text{fortfahren}} \\
0,6015625\cdot 2 &= \underbrace{1}_{\text{2.~NKS}},203125 \\
0,203125\cdot 2 &= 0,40625 \\
0,40625\cdot 2 &= 0,8125 \\
0,8125\cdot 2 &= 1,625 \\
0,625\cdot 2 &= 1,25 \\
0,25\cdot 2 &= 0,5 \\
0,5\cdot 2 &= 1,\textcolor{red}{0} \Rightarrow \textit{Abbruchbedingung} \\
0,0\cdot 2 &= \textcolor{blue}{0},0 \Rightarrow \textit{kann weggelassen werden} \\
& \Rightarrow 11001101
\end{align*}
Die Abbruchbedingung ist, dass der Nachkommaanteil gleich null ist!
\begin{Achtung}
Falls vorher festgelegt, so müssen alle Nachkommastellen aufgefüllt werden, auch wenn alle folgenden Stellen null sind! Ist dies nicht der Fall, so können weitere nullen weggelassen werden, da sie nichts am Wert ändern.
\end{Achtung}
\textbf{Ein anderes Beispiel:}
\begin{align}
& \hspace*{4mm} 0,1_{10} = \textbf{?}_{2} = 0,\textcolor{red}{000110}
\label{eq:01inBinaer} \\
& \hspace*{3mm} 0,1\cdot 2 = 0,2 \nonumber \\
\text{wiederholt sich} & \left\{
\begin{aligned}
0,\textcolor{blue}{2}\cdot 2 &= 0,4 \\
0,4\cdot 2 &= 0,8 \\
0,8\cdot 2 &= 1,6 \\
0,6\cdot 2 &= 1,\textcolor{blue}{2}
\end{aligned}\nonumber
\right. \\
& \hspace*{4mm} 0,2\cdot 2 = 0,4 \nonumber
\end{align}
Wie \autoref{eq:01inBinaer} zeigt, ist $0,1_{10}$ im Binärsystem als Kommazahl nicht exakt darstellbar, denn die Abbruchbedingung wird nie erreicht!
Bei der Wandlung von Dezimalbrüchen in Binärbrüche treten bei sehr vielen Zahlen Rundungsfehler auf!
\section{Gleit-/Fließkommazahlen}\label{sec:gleitkommazahlen}\index{Kommazahlen}
\begin{description}
\item[Gleit-/Fließkommazahl] Zahl in Darstellung mit Mantisse und Exponent (auch \textit{Exponentialdarstellung genannt}). \newline
$\text{Zahl} = \text{Mantisse} \cdot b^{\text{Exponent}}$
\item[Mantisse] Festkommazahl mit potentiell sowohl Vor- als auch Nachkommastellen.
\item[Exponent] Ganze Zahl, welche die Anzahl der Stellen angibt, um welche das Komma bei der Mantisse verschoben werden muss, um den Zahlenwert zu erhalten.
\end{description}
\begin{tabular}{ll}
$103,578\cdot 10^{2} = 10357,8$ & $\Rightarrow$ Komma wird um zwei Stellen nach rechts verschoben. \\
$103,578\cdot 10^{-2} = 1,03578$ & $\Rightarrow$ Komma wird um zwei Stellen nach links verschoben.
\end{tabular}
\begin{Tipp}
Eine Kommaverschiebung gibt es, wenn mit einer Potenz der Basis multipliziert wird. Ansonsten muss gerechnet werden.
\end{Tipp}
\begin{Hinweis}
Im Computer ist $b=2$. Die Darstellung von Mantisse und Exponent findet als Gleitkommazahl bzw. als ganze Zahl zur Basis $2$ statt.
\end{Hinweis}
\vspace{-8mm}
\begin{align*}
1_{10} & = 1,0 = 1,0 \cdot 10^0 = 0,1\cdot 10^1 = 0,01\cdot 10^2 \\
& = 10,0\cdot 10^{-1} = 100,0\cdot 10^{-2}
\end{align*}
$\Rightarrow$ jede Zahl kennt unendliche viele Darstellungen als Fließkommazahl, \dash es gibt keine eindeutige Darstellung!
Gegenmaßnahme: \textbf{Normierung}!\index{Normierung}
Achtung: Es gibt verschiedene Normierungsbedingungen. Jede Normierungsbedingung sorgt für eine eindeutige Darstellung jeder Zahl, aber die gleiche Zahl hat unterschiedliche Darstellungen bei verschiedenen Normierungsbedingungen.
Zwei gängige Normierungsbedingungen:
\qquad Mantisse: $m_{n-1}m_{n-2}\ldots m_{1}m_{0} , m_{-1}m_{-2}\ldots m_{-k}$
\begin{enumerate}[noitemsep]
\item $n=1$, \dash eine Vorkommastelle, $m_0 \neq 0$
\item alle Vorkommastellen $m_i=0$ mit $i\geq 0$, \dash de facto keine Vorkommastelle (und nur Nachkommastellen) und $m_{-1} \neq 0$, \dash die erste Nachkommastelle ist ungleich 0.
\end{enumerate}
\textbf{Problem} (bei allen Normierungsbedingungen): Es gibt keine normierte Darstellung der $0$!
\textbf{Abhilfe}: Neben der Mantisse, welche (natürlich) nur aus \enquote{0} bestehen, darf, wird für \enquote{0} auch der Wert des Exponenten festgelegt (\zB auf den kleinsten mit dem Exponenten darstellbaren Wert).
\subsection{Normierung}
$\text{mantisse} \cdot b^{\text{exponent}}$ \newline
mantisse: Festkommazahl \newline
exponent: Ganzzahl
Eine bestimmte \enquote{erste Stelle} muss ungleich 0 sein. Es sind zwei Varianten gebräuchlich $\Rightarrow$ entweder ist die erste Stelle vor dem Komma oder die erste Stelle nach dem Komma ungleich null, um der Mehrfachdarstellung von Zahlen zu entgehen ($1,5\cdot 10^1$ ist das gleiche wie $0,15\cdot 10^{2}$).
\textit{Wichtig}: Die Basis ist immer gleich! Im Computer ist die Basis $b=2$, so gilt diese Basis auch für die Mantissendarstellung!
\subsection{Normierung zur Basis $b=2$}
Ist die erste Ziffer $\neq 0$, ist muss die Ziffer $= 1$ sein.
\begin{itemize}[noitemsep]
\item[$\Rightarrow$] diese Ziffer muss nicht explizit gespeichert werden.
\item[$\Rightarrow$] diese bei der Speicherung weggelassene Ziffer ist das sogenannte \enquote{\href{https://de.wikipedia.org/wiki/Gleitkommazahl\#Hidden_bit}{\textbf{Hidden Bit}}}\index{Hidden Bit}. Dadurch kann eine weitere Nachkommastelle gespeichert werden (das \enquote{Hidden Bit} ist nur bei der Basis 2 möglich, da bei dieser Basis darauf geschlossen werden kann, um welche Ziffern es sich handelt)
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\textbf{Problem}: Darstellung der \enquote{0}!
\textbf{Lösung}: Ein spezielles Bitmuster stellt die \enquote{0} dar (alle Mantissen- und Exponentenbits sind \enquote{0}). In diesem Fall muss auch das \enquote{Hidden Bit} $=0$ gesetzt werden.
In allen anderen Fällen ist das \enquote{Hidden Bit} $=1$!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\textbf{Beispiel} (mit 8~Bit):\newline
$1,011000_{2}$ für Zweierkomplement: $01,011000_2 \xrightarrow{\text{1er-Komplement}}$ 10,100111 $\xrightarrow{\text{+1}}$ 10,101000
\textbf{Aufgabe}: Komma um \zB vier Stellen nach vorne verschieben: $\Rightarrow 0,0001011000_2$
\textbf{Problem}:
\begin{itemize}[noitemsep]
\item Kommaverschiebung bei negativen Zahlen bedeutet anfügen von \enquote{1} anstatt \enquote{0}
\item Normierung bedeutet: Bestimmte Stelle $=0$ statt $=1$ bei negativen Zahlen.
\item[$\Rightarrow$] 2er-Komplement wird für Mantisse (meist) nicht verwendet.
\end{itemize}
\textit{Stattdessen: Vorzeichen und Betrag als übliche Darstellung der Mantisse bei Gleitkommazahl.}
\subsection{Negative Zahlen beim Exponenten?}
Herangehensweise beim Größenvergleich zweier Gleitkommazahlen:
\begin{enumerate}[noitemsep]
\item Vergleich der Mantissenvorzeichen
\item Vergleich der Exponenten. Beispiel: \newline
$1,111\cdot b^{-5} = 0,00001111$ ist kleiner als \newline
$1,000\cdot b^{+3} = 1010,0$
\item stellenweiser Vergleich\newline
Problem: positives Vorzeichen: (\enquote{0}) ist größer als negatives Vorzeichen (\enquote{1})
\item Mantissenvergleich
\end{enumerate}
Für Exponent: Aus potentiell negativem Exponenten wird immer ein nicht negativer Zahlenwert:\newline
\hspace*{6mm} $exp_{reell} + Bias = exp_{gespeichert}$
\subsubsection*{Bias}\index{Bias}
Der Bias ist eine festgelegte Konstante für die jeweilige Zahlendarstellung, welche den Betrag der kleinsten negativen Zahl angibt.
Typischer Bias: bei 8 Bit Exponenten: 127 (\dash $-127\leq exp_{reell}\leq +128$). \newline
Achtung: Dieser Wertebereich ist gegenüber dem mit 2er-Komplement erzielbaren Wertebereich um \enquote{1} verschoben (beim 2er-Komplement reicht der Wertebereich von $-128$ bis $+127$)!
\textbf{Beispiele}
\begin{table}[h]
\centering
\begin{tabular}{c|cc}
Bias & gespeichert & reell \\
\midrule
127 & $2^{0}$ & $2^{-127}$ \\
127 & $2^{127}$ & $2^{0}$ \\
127 & $2^{50}$ & $2^{-77}$ \\
127 & $2^{255}$ & $2^{128}$ \\
\end{tabular}
\caption{Gleitkommazahlen - Beispiele für Bias}
\end{table}
\subsection{Speicherung von Gleitkommazahlen gemäß IEEE 754}\index{IEEE 754}
\begin{table}[h]
\begin{tabular}{l|cccc|r}
& Anzahl Bit & Vorzeichen & Mantisse & Exponent & Bias \\
\midrule
\code{float} (bzw. Single) & 32 & 1 & 23 & 8 & 127\\
\code{double} & 64 & 1 & 52 & 11 & 1023 \\
\code{short/half} (Nachtrag 200x) & 16 & 1 & 10 & 5 & 15
\end{tabular}
\caption{IEEE 754 -- Anzahl Bits -- \acs{GKZ}}
\end{table}
\subsection{Wertebereich mit 32~Bit (\code{single/float} vs. Festkommazahl)}
\subsubsection{Festkommazahl}
32~Bit mit 16~Bit Vor- und 16~Bit Nachkommastellen und keine negativen Zahlen.
\begin{description}
\item[größte Zahl] $\Rightarrow$ alles \enquote{1}:
\begin{align*}
\underbrace{1111111111111111}_{\text{16mal}},\underbrace{1111111111111111}_{\text{16mal}} \\
=(2^{16}-1) + (1-2^{-16}) = 2^{16} -2^{-16} = 65536 - \frac{1}{65536} = 65535,9999847412
\end{align*}
\item[kleinste Zahl] 0
\item[kleinste Zahl >0] $2^{-16} = \frac{1}{65536} \approx 0,00001$ $\Rightarrow$ gleichzeitig der kleinste unterscheidbare Abstand zweier (benachbarter) Zahlen.
\end{description}
%%%%%%%%%%%%%%%
\subsubsection{bei Gleitkommazahlen/Single Precision IEEE 754}
Reihenfolge: \quad Vorzeichen \quad |\quad Exponent \quad |\quad Mantisse\newline
\enquote{Hidden Bit} = \enquote{1} als 1. Vorkommastelle
\begin{Hinweis}
Ich bin mir sicher, dass Herr Röthig gesagt hat, dass alle Exponentenbits für die größtmögliche Zahl auf 1 gesetzt werden. Laut IEEE 754 handelt es sich aber um \acs{NaN} bzw. Unendlich, wenn alle Exponentenbits gesetzt sind.
\textit{Siehe auch \url{https://de.wikipedia.org/wiki/IEEE_754}}.
\end{Hinweis}
\begin{description}
\item[größte \acs{GKZ}]
\begin{align*}
\underbrace{0}_{\text{VZ}}\underbrace{1~~1~~1~~1~~1~~1~~1~~1}_{\text{Exp.} = 255 - Bias = 128}\underbrace{11111111111\ldots 111111111}_{\text{23 mal -- Mantisse -- } 1 + (1 - 2^{-23})}
\end{align*}
Damit: $(2-2^{-23})\cdot 2^{128} = 2^{129} - 2^{105} \approx (10^3)^{13} \cdot \frac{1}{2}-(10^3)^{10}\cdot 2^5$ (die $\frac{1}{2}$, da es nicht 130 sind).
\item[kleinste \acs{GKZ}] wie die größte Zahl, aber mit negativem Vorzeichen.
\item[kleinste \acs{GKZ} $> 0$]
\begin{align*}
\underbrace{0}_{\text{Vz}}\underbrace{0~~0~~0~~0~~0~~0~~0~~0}_{\text{Exp.} = 0 - \text{Bias} = -127}\underbrace{0~0~0~0~0~0~\ldots 0~0~0~0~0~0~0~1}_{\text{22 mal die 0 -- Mantisse -- } 1 + 2^{-23}}
\end{align*}
$\Rightarrow$ $(1+2^{-23}) \cdot 2^{-127} = 2^{-127} + 2^{-150} \approx \frac{1}{\ldots}$
\item[nächstgrößere GKZ nach der kleinsten > 0]
\begin{align*}
\underbrace{0}_{\text{Vz}}\underbrace{0~0~0~0~0~0~0~0}_{\text{Exponent} = 0 - \text{Bias} = -127}\underbrace{000\ldots 00010}_{\text{Mantisse}}
\end{align*}
$\Rightarrow$ $(1+2^{-22}) \cdot 2^{-127}$, \dash Abstand ist $2^{-150}$
\dash der kleinste Abstand zwischen zwei (benachbarten) Zahlen ist bei Gleitkommazahlen nicht konstant, sondern hängt vom jeweiligen Exponenten der Zahl ab!
\end{description}
Bei Überläufen ergibt sich \enquote{\acf{NaN}}, welches durch ein spezielles Bitmuster dargestellt wird.
\begin{Achtung}
Der Vergleich von NaN mit NaN ergibt \textit{immer} \code{false}! Dies ist im Standard definiert.
\begin{center}
$NaN \neq NaN$
\end{center}
\end{Achtung}
\subsection[Umrechnung in GKZ zur Basis 2]{Umrechnung einer Zahl in die Darstellung als Gleitkommazahl zur Basis 2 im Computer}
$\Rightarrow 4,2\cdot 10^{-1}$
\begin{enumerate}[noitemsep]
\item Feststellung des Vorzeichens. Weitere Rechnung mit Betrag durchführen.
\item Schritt: Umrechnung in eine Festkommazahl
$4,2\cdot 10^{-1} = 0,42$
\item Umrechnung der Festkommazahl in die Zielbasis 2: $0,\textcolor{red}{0110101110000}$
\begin{table*}[h]
\centering
\begin{tabular}{l}
$0,42\cdot 2 = \textcolor{red}{0},84$ \\
$0,84\cdot 2 = 1,68$ \\
$0,68\cdot 2 = 1,56$ \\
$0,56\cdot 2 = 0,72$ \\
$0,72\cdot 2 = 1,44$ \\
$0,44\cdot 2 = 0,88$ \\
$0,88\cdot 2 = 1,76$ \\
\end{tabular}
\begin{tabular}{l}
$0,76\cdot 2 = 1,52$ \\
$0,52\cdot 2 = 1,04$ \\
$0,04\cdot 2 = 0,08$ \\
$0,08\cdot 2 = 0,16$ \\
$0,16\cdot 2 = 0,32$ \\
$0,32\cdot 2 = 0,64$ \\
\\
\end{tabular}
\end{table*}
Solange weiter rechnen, bis die relevante Anzahl signifikanter Mantissenbits erreicht ist (die ersten nullen sind \textit{nicht} signifikant! Erst die erste \enquote{1} ist signifikant. \textit{Achtung}: Bei \enquote{Hidden Bit} eine Stelle mehr).
\item Komma verschieben für Normierung, Exponent entsprechend setzen
$1,\underbrace{1010111000}_{\text{10 Stellen}}(0) \cdot 2^{-2}$
\item Exponent plus Bias: $-2 + 15 = 13$
\item Exponent ins Binärsystem umrechnen und mit führenden Nullen auffüllen
$13_{10} = 1101_2 (= 1+4+8) = 01101_2$
\item Fließkommazahl als Bitmuster
\begin{align*}
\underbrace{0}_{\text{Vz}}\underbrace{01101}_{\text{Exponent}}\underbrace{1010111000}_{\text{Mantisse}}
\end{align*}
\end{enumerate}
\begin{Hinweis}
Für die Klausur müssen nur die Gesamtanzahl der Bits auswendig gelernt werden (\texttt{float}, \texttt{double}, \texttt{half}). Der Rest (also Anzahl Bits der Mantisse,\ldots) muss \textit{nicht} auswendig gelernt werden!
\end{Hinweis}
\section{Weitere Zahlencodierungen}
Zahlencodierung wird unterschieden in:
\begin{description}
\item[Wertcodierung] Wert der Zahl als ganzes wird betrachtet und codiert.
\item[Zifferncodierung] Zahl wird Ziffernweise codiert \newline
Beispiel:
\begin{itemize}[noitemsep]
\item direkte Umrechnung von 2er ins 16er-System (oder ähnliches).
\item Zahlendarstellung im Text (als Ziffernfolge)
\item \acf{BCD} \newline
$\Rightarrow$ binär (mit 4 Bit) kodierte \enquote{Dezimalstellen}
\end{itemize}
\end{description}
\subsection{\acf{BCD}}\index{BCD}
\begin{table}[h]
\centering
\begin{tabular}{c|c}
4~Bit & Dezimalziffer \\
\midrule
0000 & 0 \\
0001 &1 \\
0010 &2 \\
0011 & 3\\
0100 & 4\\
0101 & 5\\
\end{tabular}
\begin{tabular}{c|c}
4~Bit & Dezimalziffer \\
\midrule
0110 & 6\\
0111 & 7\\
1000 & 8\\
1001 & 9\\
1010 & \\
& \\
\end{tabular}
\begin{tabular}{c|c}
4~Bit & Dezimalziffer \\
\midrule
1011 & \\
1100 & \\
1101 & \\
1110 & \\
1111 & \\
& \\
\end{tabular}
\caption{\acs{BCD} zu Dezimalziffer}
\end{table}
Die übrigen Bitmuster sind individuell zugeordnet (das Vorzeichen \enquote{+/-}, das Komma \enquote{~,~}, der Dezimalpunkt \enquote{~.~})!
$\Rightarrow$ Damit \textit{kann} mit einem Byte der Wertebereich von 0 bis 99 abgedeckt werden.
Zum Vergleich:
\begin{itemize}[noitemsep]
\item Textcodierung mit einem Byte:\qquad Wertebereich 0 bis 9
\item Binärcodierung mit einem Byte:\qquad 0 bis 255
\end{itemize}
\textbf{Reales Beispiel}: 6502-CPU (Apple \RNum{2}, Commodore C64) konnte in Maschinensprache mit BCD-Zahlen rechnen!