Skip to content

Commit 435dd0d

Browse files
committed
Final version of L9
1 parent 7ea0c8d commit 435dd0d

1 file changed

Lines changed: 119 additions & 35 deletions

File tree

09_Rechnerarithmetik.md

Lines changed: 119 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ style="width: 80%; min-width: 420px; max-width: 720px;"
8686

8787
## Zahlendarstellung
8888

89-
### Ganzzahlige Zahlensystem
89+
Ganzzahlige Zahlensystem
90+
====================================
9091

9192
{{0-1}}
9293
********************************************************************************
@@ -106,6 +107,9 @@ Es handelt sich um eine additive Zahlschrift, mit ergänzender Regel für die su
106107

107108
[^1]: WarpFlyght, Eingang des Kolosseums mit der römischen Zahl LII (52), https://commons.wikimedia.org/wiki/File:Colosseum-Entrance_LII.jpg
108109

110+
********************************************************************************
111+
112+
{{1-2}}
109113
********************************************************************************
110114

111115
**Dezimale Zahlen**
@@ -132,6 +136,11 @@ $$
132136

133137
Beispiel $11101_{2}=1 \cdot 2^4 + 1 \cdot 2^3 + 1 \cdot 2^2 + 0 \cdot 2^1 +1 \cdot 2^0 = 16 + 8 + 4 +1 = 29$
134138

139+
********************************************************************************
140+
141+
{{2-3}}
142+
********************************************************************************
143+
135144
**Verallgemeinerung b-adische Zahlensysteme**
136145

137146
Jede natürliche Zahl $z$ mit $0 \leq z \leq b^n–1$ ist eindeutig als $n$-stellige Zahl zur Basis $b$ darstellbar:
@@ -160,12 +169,17 @@ Beispiel $FE01_{16}=15 \cdot 16^3 + 14 \cdot 16^2 + 0 \cdot 16^1 + 1 \cdot 16^0
160169
161170
Beispiel: $214_{10}$
162171

163-
| Zahlensystem | x_{7} | x_{6} | x_{5} | x_{4} | x_{3} | x_{2} | x_{1} | x_{0} |
164-
| ------------ | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
165-
| Dual | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
166-
| Oktal | | | | | | 3 | 2 | 6 |
167-
| Dezimal | | | | | | 2 | 1 | 4 |
168-
| Hexadezimal | | | | | | | D | 6 |
172+
| Zahlensystem | $x_{7}$ | $x_{6}$ | $x_{5}$ | $x_{4}$ | $x_{3}$ | $x_{2}$ | $x_{1}$ | $x_{0}$ |
173+
| ------------ | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
174+
| Dual | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
175+
| Oktal | | | | | | 3 | 2 | 6 |
176+
| Dezimal | | | | | | 2 | 1 | 4 |
177+
| Hexadezimal | | | | | | | D | 6 |
178+
179+
********************************************************************************
180+
181+
{{3-5}}
182+
********************************************************************************
169183

170184
Algorithmus zur Umwandlung einer ganzen Zahl z aus dem Dezimalsystem in eine Zahl x zur Basis b:
171185

@@ -197,11 +211,34 @@ Der Teiler definiert das avisierte Zahlensystem
197211
198212
```
199213

214+
> **Aufgabe:** Wandeln Sie die Zahl $523_{10}$ in eine binäre Zahl um.
215+
216+
********************************************************************************
217+
218+
{{4}}
219+
********************************************************************************
220+
<!--
221+
style="width: 80%; min-width: 420px; max-width: 720px;"
222+
-->
223+
```ascii
224+
523 / 2 = 261 Rest 1 |
225+
261 / 2 = 130 Rest 1 |
226+
130 / 2 = 65 Rest 0 |
227+
65 / 2 = 32 Rest 1 |
228+
32 / 2 = 16 Rest 0 |
229+
16 / 2 = 8 Rest 0 | .
230+
8 / 2 = 4 Rest 0 |
231+
4 / 2 = 2 Rest 0 |
232+
2 / 2 = 1 Rest 1 v
233+
```
234+
235+
********************************************************************************
236+
200237
### Gebrochene Zahlen
201238

202239
Die Römer nutzten Brüche mit der Basis 12(!). Die Nutzung der 12 lag nahe, weil sich die am häufigsten benötigten Brüche _eine Hälfte_, _ein Drittel_ und _ein Viertel_ durch Vielfache von $1/12$ darstellen lassen. Der römische Name für ein Zwölftel ist Uncia, ein Wort, das später zum Gewichtsmaß _Unze_ wurde. Für Brüche, deren Zähler um 1 kleiner als der Nenner ist, wurde teilweise eine subtraktive Bezeichnung verwendet.
203240

204-
Die Darstellung einer gebrochenen Zahl ist in einem $b$-adischen System mit $n$ Vorkomma und $m$ Nachkommestellen definiert mit:
241+
Die Darstellung einer gebrochenen Zahl ist in einem $b$-adischen System mit $n$ Vorkomma und $m$ Nachkommastellen definiert mit:
205242

206243
$$
207244
\begin{aligned}
@@ -246,8 +283,10 @@ Der Faktor definiert das avisierte Zahlensystem
246283

247284
Ergebnis $0.8125_{10} = 0.1011$
248285

249-
Beispiel 2: Wandeln Sie $0.1_{10}$ in eine duale Zahl
286+
> Beispiel 2: Wandeln Sie $0.1_{10}$ in eine duale Zahl
250287
288+
{{1}}
289+
********************************************************************************
251290
<!--
252291
style="width: 80%; min-width: 420px; max-width: 720px;"
253292
-->
@@ -274,6 +313,8 @@ print("{0:50.50f}\n{1}".format(a, x))
274313
```
275314
@LIA.eval(`["main.py"]`, `python3 -m compileall .`, `python3 main.py`)
276315
316+
********************************************************************************
317+
277318
### Wechsel zwischen Zahlensystemen mit Basis $2^n$
278319
279320
**Manuelle Vorgehensweise**
@@ -343,33 +384,37 @@ style="width: 80%; min-width: 420px; max-width: 720px;"
343384
1 / 2 = 0 Rest 1 v .
344385
```
345386

387+
{{1}}
388+
********************************************************************************
346389

347390
| | $0$ | $0$ | $1$ | $1$ | $0$ | $1$ | $1$ | $1$ | Summand A $(55)_{10}$ |
348391
| --- | --- | --- | --- | --- | --- | --- | --- | --- | ---------------------- |
349392
| + | $1$ | $1$ | $0$ | $1$ | $0$ | $1$ | $1$ | $0$ | Summand B $(214)_{10}$ |
350393
| @red($1$) | @blue($1$) | @blue($1$) | @blue($1$) | @blue($1$) |@blue($0$) | @blue($1$) | @blue($1$) |@blue( $0$ ) | @blue($Carry$) |
351394
| | $0$ | $1$ | $1$ | $0$ | $1$ | $1$ | $0$ | $1$ | Ergebnis $(269)^{10}$ |
352395

353-
Der Intel 4004 hatte eine Datenbreite von 4 Bit. Er verknüpfte für die Akkumulation von 2 32 Bit Zahlen 4 einzelkalkulationen und reichte das Carry Flag entsprechend weiter.
396+
Der Intel 4004 hatte eine Datenbreite von 4 Bit. Er verknüpfte für die Akkumulation von 2 32 Bit Zahlen 4 Einzelkalkulationen und reichte das Carry-Flag entsprechend weiter.
354397

398+
********************************************************************************
355399

400+
### Negative Zahlen
356401

357-
<!--
358-
style="width: 80%; min-width: 420px; max-width: 720px;"
359-
-->
360-
```ascii
361-
TODO .
362-
```
363402

364-
### Negative Zahlen
403+
{{0-1}}
404+
********************************************************************************
365405

366406
> "... aber wie hältst Du es mit den negativen Zahlen?"
367407
368-
| Kriterion | Erläuterung |
369-
| --------- | ----------- |
370-
| | |
371-
| Symmetrie | |
372-
| | |
408+
| Kriterien | Erläuterung |
409+
| ----------------------------------- | ------------------------------------------------------------------------------- |
410+
| Einheitlichkeit von Addition Subtraktion | Können wir die Subtraktion und Addition über ein Rechenwerk umsetzen? |
411+
| Symmetrie | Ist das Spektrum der darstellbaren Zahlenwerte im positiv wie negativen gleich? |
412+
| | |
413+
414+
********************************************************************************
415+
416+
{{1-2}}
417+
********************************************************************************
373418

374419
**Intuitiver Ansatz - Betrag mit Vorzeichen**
375420

@@ -410,6 +455,10 @@ Addition Subtraktion
410455
| | + Einfache Bildung des Komplements | - Doppelte „0“ - $0000...0_2$ und $1000...1_2$ |
411456
| | | - Addition / Subtraktion über unterschiedliche Rechenwerke |
412457

458+
********************************************************************************
459+
460+
{{2-5}}
461+
********************************************************************************
413462

414463
**Komplement Darstellung**
415464

@@ -435,6 +484,11 @@ style="width: 80%; min-width: 420px; max-width: 720px;"
435484
612 + 655 = (1)267 612 + 654 + 1 = (1)267 .
436485
```
437486

487+
********************************************************************************
488+
489+
{{3-5}}
490+
********************************************************************************
491+
438492
**Einer-Komplement**
439493

440494
![](./images/09_Arithmetik/Zahlenkreise_1er.png)<!-- style="width: 70%; max-width: 800px;" -->
@@ -444,9 +498,10 @@ style="width: 80%; min-width: 420px; max-width: 720px;"
444498
| | + der darstellbare Zahlenbereich ist symmetrisch zu 0 | - Doppelte „0“ - $0000...0_2$ und $1111...1_2$ |
445499
| | + sehr einfache Umwandlung von positiver zu negativer Zahl und umgekehrt durch Invertierung aller Bits | - Addierwerke sind aufwendiger, da die Summe korrigiert werden muss |
446500

501+
********************************************************************************
447502

448-
449-
503+
{{4-5}}
504+
********************************************************************************
450505

451506
**Zweier-Komplement**
452507

@@ -459,13 +514,27 @@ Die Zweierkomplementdarstellung benötigt, anders als die Einerkomplementdarstel
459514
| | + eindeutige Darstellung der Null als $000...0_2$ | - darstellbarer Zahlenbereich ist asymmetrisch (Zweierkomplement der kleinsten negativen Zahl ist nicht darstellbar!) |
460515
| | | + Umwandlung von positiver zu negativer Zahl und umgekehrt erfordert die Invertierung aller Bits sowie ein Addierwerk zur Addition von 1 |
461516

517+
********************************************************************************
518+
519+
{{5}}
520+
********************************************************************************
462521

463522
**Zusammenfassung**
464523

524+
| Darstellung | Pros | Cons |
525+
| ----------- | ---------------------------------- | ----------------------------------------------------------- |
526+
| Vorzeichen / Betrag | + Einfache Bildung des Komplements | - Doppelte „0“ - $0000...0_2$ und $1000...1_2$ |
527+
| | | - Addition / Subtraktion über unterschiedliche Rechenwerke |
528+
| Einerkomplement | + der darstellbare Zahlenbereich ist symmetrisch zu 0 | - Doppelte „0“ - $0000...0_2$ und $1111...1_2$ |
529+
| | + sehr einfache Umwandlung von positiver zu negativer Zahl und umgekehrt durch Invertierung aller Bits | - Addierwerke sind aufwendiger, da die Summe korrigiert werden muss |
530+
| Zweierkomplement | + eindeutige Darstellung der Null als $000...0_2$ | - darstellbarer Zahlenbereich ist asymmetrisch (Zweierkomplement der kleinsten negativen Zahl ist nicht darstellbar!) |
531+
| | | + Umwandlung von positiver zu negativer Zahl und umgekehrt erfordert die Invertierung aller Bits sowie ein Addierwerk zur Addition von 1 |
465532

466533

467534
> **Merke:** In aktuellen Rechnern wird ausschließlich das Zweierkomplement verwandt.
468535
536+
********************************************************************************
537+
469538
### Überlauf bei arithmetischen Operationen
470539

471540
> **Merke:** Wir müssen von einer festen Länge der Zahlenrepräsentation ausgehen!
@@ -503,6 +572,9 @@ Dafür werden die höchstrangigen Bits der Summanden und des Ergebnisses ausgewe
503572

504573
## Schaltwerke für arithmetische Operationen
505574

575+
{{0}}
576+
********************************************************************************
577+
506578
Wir starten aus der Sicht eines einzigen Bits und erweitern die Konzepte dann auf die notwendigen Registerbreiten (8 - 64 Bit).
507579

508580
| A | B | Addition | Subtraktion | Multiplikation |
@@ -514,6 +586,14 @@ Wir starten aus der Sicht eines einzigen Bits und erweitern die Konzepte dann au
514586
| | | ![Bild](./images/04_Schaltnetze/188px-Xor-gate-en.svg.png) | ![Bild](./images/04_Schaltnetze/188px-Xor-gate-en.svg.png) | ![Bild](./images/04_Schaltnetze/188px-Logic-gate-and-us.svg.png) |
515587
| | | Vierteladdierer | Viertelsubtrahierer | 1-Bit Multiplizierer |
516588

589+
590+
********************************************************************************
591+
592+
{{1-2}}
593+
********************************************************************************
594+
595+
**Halbaddierer**
596+
517597
Um das Ergebnis komplett darzustellen müsen wir für die Addition (Subtraktion als Komplementoperation) neben dem Ergebnis $S$ auch die Carry Flags $C$ berücksichtigen.
518598

519599
<table>
@@ -524,9 +604,6 @@ Erweiterte Wahrheitstabelle
524604
<td>
525605
Gleichungen
526606
</td>
527-
<td>
528-
Mögliche Realsierung
529-
</td>
530607
</tr>
531608
<tr>
532609
<td>
@@ -545,18 +622,25 @@ C &= A \cdot B
545622
\end{aligned}
546623
$$
547624
</td>
548-
<td>
549-
![Bild](./images/09_Arithmetik/Half_Adder.svg.png)<!-- style="width: 50%; max-width: 800px;" -->
550-
551-
![Bild](./images/09_Arithmetik/Half_Adder_Symbol.png)<!-- style="width: 50%; max-width: 800px;" -->
552-
</td>
553625
</tr>
554626
</table>
555627

628+
Die Wahrheitstafel lässt sich mit folgendem Schaltnetz umsetzen:
629+
630+
![Bild](./images/09_Arithmetik/Half_Adder.svg.png)<!-- style="width: 40%; max-width: 800px;" -->
631+
![Bild](./images/09_Arithmetik/Half_Adder_Symbol.png)<!-- style="width: 15%; max-width: 600px;" -->
632+
556633
``` json @DigiSim.evalJson
557634
{"devices":{"a":{"label":"a","type":"Button","propagation":0,"position":{"x":15,"y":0}},"b":{"label":"b","type":"Button","propagation":0,"position":{"x":15,"y":50}},"s":{"label":"s","type":"Lamp","propagation":1,"position":{"x":315,"y":45}},"cout":{"label":"cout","type":"Lamp","propagation":1,"position":{"x":315,"y":0}},"xor":{"label":"a xor b","type":"Xor","propagation":1,"bits":1,"position":{"x":160,"y":50}},"and":{"label":"a and b","type":"And","propagation":1,"bits":1,"position":{"x":155,"y":-5}}},"connectors":[{"from":{"id":"a","port":"out"},"to":{"id":"and","port":"in1"}},{"from":{"id":"b","port":"out"},"to":{"id":"and","port":"in2"}},{"from":{"id":"and","port":"out"},"to":{"id":"cout","port":"in"}},{"from":{"id":"a","port":"out"},"to":{"id":"xor","port":"in1"}},{"from":{"id":"b","port":"out"},"to":{"id":"xor","port":"in2"}},{"from":{"id":"xor","port":"out"},"to":{"id":"s","port":"in"}}],"subcircuits":{}}
558635
```
559636

637+
********************************************************************************
638+
639+
{{2-3}}
640+
********************************************************************************
641+
642+
**Volladierer**
643+
560644
Die allgemeingültige Addition von $A_i$, $B_i$ und $C_{i–1}$ an den Bitpositionen $i = 1, ... , n–1$ erfordert einen Volladdierer (FA = „Full Adder“), der die Summe $S_i$ und den Übertrag $C_i$ bestimmt:
561645

562646
<table>
@@ -567,9 +651,6 @@ Erweiterte Wahrheitstabelle
567651
<td>
568652
Gleichungen
569653
</td>
570-
<td>
571-
Mögliche Realsierung
572-
</td>
573654
</tr>
574655
<tr>
575656
<td>
@@ -608,6 +689,9 @@ $$
608689
{"devices":{"a":{"label":"a","type":"Button","propagation":0,"position":{"x":15,"y":0}},"b":{"label":"b","type":"Button","propagation":0,"position":{"x":15,"y":50}},"cin":{"label":"cin","type":"Button","propagation":0,"position":{"x":15,"y":100}},"s":{"label":"s","type":"Lamp","propagation":1,"position":{"x":470,"y":70}},"cout":{"label":"cout","type":"Lamp","propagation":1,"position":{"x":540,"y":-5}},"xor1":{"label":"a xor b","type":"Xor","propagation":1,"bits":1,"position":{"x":140,"y":20}},"xor2":{"label":"(a xor b) xor cin","type":"Xor","propagation":1,"bits":1,"position":{"x":275,"y":75}},"and1":{"label":"(a xor b) and cin","type":"And","propagation":1,"bits":1,"position":{"x":290,"y":25}},"and2":{"label":"a and b","type":"And","propagation":1,"bits":1,"position":{"x":210,"y":-25}},"or":{"label":"((a xor b) and cin) or (a and b)","type":"Or","propagation":1,"bits":1,"position":{"x":380,"y":-30}}},"connectors":[{"from":{"id":"xor2","port":"out"},"to":{"id":"s","port":"in"}},{"from":{"id":"xor1","port":"out"},"to":{"id":"xor2","port":"in1"}},{"from":{"id":"cin","port":"out"},"to":{"id":"xor2","port":"in2"}},{"from":{"id":"a","port":"out"},"to":{"id":"xor1","port":"in1"}},{"from":{"id":"b","port":"out"},"to":{"id":"xor1","port":"in2"}},{"from":{"id":"cin","port":"out"},"to":{"id":"and1","port":"in2"},"vertices":[{"x":225,"y":115}]},{"from":{"id":"xor1","port":"out"},"to":{"id":"and1","port":"in1"}},{"from":{"id":"a","port":"out"},"to":{"id":"and2","port":"in1"}},{"from":{"id":"b","port":"out"},"to":{"id":"and2","port":"in2"},"vertices":[{"x":105,"y":25}]},{"from":{"id":"and1","port":"out"},"to":{"id":"or","port":"in2"}},{"from":{"id":"and2","port":"out"},"to":{"id":"or","port":"in1"}},{"from":{"id":"or","port":"out"},"to":{"id":"cout","port":"in"}}],"subcircuits":{}}
609690
```
610691

692+
********************************************************************************
693+
694+
611695
## Umsetzung von Addierwerken
612696

613697
Wie können wir also ein paralleles binäres Addierwerk umsetzen? Für die Addition zweier n-Bit Zahlen bedarf es $n$ Volladierer, die miteinander verkettet werden.

0 commit comments

Comments
 (0)