# Wie rechnet ein Computer?

# Zahlendarstellung

## Das Dezimalsystem
Das Dezimalsystem kennen wir alle. Das sind die Zahlen, die wir lesen und sofort verstehen können. Schauen wir noch einmal, wie diese Zahlen mathematisch funktionieren. 
Jede Ziffer bekommt eine unterschiedliche Bedeutung, je nachdem, wo sie in der Zahl steht. Ganz rechts sind die "Einer". Das heißt, eine 1 bedeutet auch 1. An der zweiten Stelle von rechts bedeutet die 1 schon 10 usw. Das lässt sich mathematisch so darstellen: 

<div drawio-diagram="57"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2023-09/tabjrsHQeSFxcxRZ-drawing-3-1693645156.png"></div>


Dasselbe funktioniert auch, wenn wir weniger Ziffern zur Verfügung haben, z.B. nur zwei, nämlich 0 und 1: 

<div drawio-diagram="53"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2023-09/kEgfC6pbUH7f2yDx-drawing-3-1693644943.png"></div>

Auf diese Weise können Binärzahlen in Dezimalzahlen umgewandelt werden. 
Zur umgekehrten Rechnung kann man einen Algorithmus verwenden. 

## Algorithmus zum Berechnen einer Binärzahl
<div drawio-diagram="49"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2023-08/PBVTYDDOvYijI1zA-drawing-3-1692869516.png"></div>
Beispiel: 

```
190:2=	95	Rest 0
95:2=	47	Rest 1
47:2=	23	Rest 1
23:2=	11	Rest 1
11:2=	5	Rest 1
5:2=	2	Rest 1
2:2=	1	Rest 0
1:2=	0	Rest 1
```

Die Binärzahl lautet dann 10111110. Sie muss also von unten nach oben gelesen werden.

### Programmierung dieses Algorithmus
So sieht die Grundstruktur des Programms aus: 
``` 
import math
def convertDecToBin(dec):
    pass
    # Code

def convertToDec(number):
    pass
    # Code
number = input("Welche Zahl moechtest du umwandeln?\n")

zahl= convertDecToBin(int(number))
print(f"Die Zahl {number} als Binaerzahl lautet: {zahl}")
print(f"Die urspruengliche Zahl war: {convertToDec(zahl)}")
```

# Addition von Binärzahlen

## Addition von Dezimalzahlen 

<div drawio-diagram="64"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2023-09/QIH76ZM6NW8GVn3H-drawing-3-1693830354.png"></div>


## Addition von Binärzahlen

<div drawio-diagram="63"><img src="https://bookstack.jb-net.eu/uploads/images/drawio/2023-09/oeGNDaRyj8wSl5Rq-drawing-3-1693830246.png"></div>

Die Addition funktioniert wie die Addition von Dezimalzahlen. Bei Dezimalzahlen stehen 10 Ziffern zur Verfügung. Ab der 10. Ziffer kommt es zu einem Überlauf, d. h., sie lässt sich nicht mehr darstellen. Daher muss die 10er-Stelle als Übertrag notiert werden und bei der Addition der nächsten Stelle berücksichtigt werden. 
Bei den Binärzahlen stehen nur zwei Ziffern zur Verfügung. Daher kommt es schon früher zu einem Überlauf. Dieser muss genauso berücksichtigt werden wie bei der Addition von Dezimalzahlen.

# Logische Schaltungen

Ein Computer kann nur Nullen und Einsen. Das weiß mehr oder weniger jeder. Doch wie kann ein Computer damit rechnen? Darum geht es in diesem Kapitel. 
## Simulation von logischen Schaltungen
Zur Übung simulieren wir die Schaltungen, aus denen ein Computerchip aufgebaut ist, mit [Digital Logic Sim](https://bookstack.jb-net.eu/attachments/55). Die ZIP-Datei muss nur entpackt werden und das Programm wird dann mit einem Doppelklick auf `Digital LOgic Sim.exe` gestartet.

Mithilfe dieses Programms soll aus einer AND- und einer NOT-Schaltung ein Addierer aufgebaut werden, mit dem man zwei 1-Bit Binärzahlen addieren kann. Wer weitermachen möchte, kann damit natürlich auch einen 4-Bit Addierer bauen. 
Unter Windows werden die Daten unter diesem Verzeichnis gespeichert: 

`C:\Benutzer\BENUTZERNAME\AppData\LocalLow\SebastianLague\Digital Logic Sim\V1\Projects`. 

Um das Verzeichnis im *Windows Explorer* anzuzeigen muss unter *Ansicht* noch *Ausgeblendete Elemente* angewählt werden. 

Hier sind die Schaltbilder der einzelnen Elemente. Diese müssen in dieser Reihenfolge angelegt werden. 
### OR
[![01_OR.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/Ips3BAYubVtO2i4k-01-or.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/Ips3BAYubVtO2i4k-01-or.png)
### NOR
[![02_NOR.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/XjwXDmPgarNzEGpA-02-nor.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/XjwXDmPgarNzEGpA-02-nor.png)
### NAND
[![03_NAND.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/ArQ0Sm2O1idBaMa7-03-nand.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/ArQ0Sm2O1idBaMa7-03-nand.png)
### XOR
[![04_XOR.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/5rVnZmyITqXUo3cz-04-xor.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/5rVnZmyITqXUo3cz-04-xor.png)
### HALF ADDER
[![HALFADDER.png](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/scaled-1680-/4YeXIWOUoe91O1CG-halfadder.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/4YeXIWOUoe91O1CG-halfadder.png)

oder die Version mit Schaltsymbolen: 

[![HALF_ADDER.png](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/scaled-1680-/A3KpeM9MwXXgHJuT-half-adder.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/A3KpeM9MwXXgHJuT-half-adder.png)
### ADDER
[![ADDER.png](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/scaled-1680-/bVUmamJN4f4ei5Ck-adder.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/bVUmamJN4f4ei5Ck-adder.png)

oder eine Version ohne den Halbaddierer: 

[![ADDER.png](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/scaled-1680-/XqN2Ik30ZH1QchSj-adder.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2025-03/XqN2Ik30ZH1QchSj-adder.png)

## Simulation von Computerspeicher

### D-Latch
[![07_dlatch.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/xpe2lAXMBTNQ032a-07-dlatch.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/xpe2lAXMBTNQ032a-07-dlatch.png)
### SR-Latch
[![08_sr-latch.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/2G08qPLhnrYpdBaY-08-sr-latch.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/2G08qPLhnrYpdBaY-08-sr-latch.png)

# Kodierung von Buchstaben

Ein Vorläufer der heutigen Kodierung von Buchstaben ist das Morsealphabet.
[![International_Morse_Code_-_letters.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/f9QEKg18hFrhYBUJ-international-morse-code-letters.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/f9QEKg18hFrhYBUJ-international-morse-code-letters.png)

So wie ein Computerchip, konnte man mit Morsegeräten nur zwischen einem kurzen und einem langen Signal unterscheiden. Jeder Buchstabe bekam also eine Kombination aus kurzen und langen Impulsen zugewiesen. 

Für die Kodierung von Buchstaben und anderen Zeichen auf dem Computer wurde auch eine Kodierungstabelle entwickelt. Die erste Tabelle hier ASCII (American Standard Code for Information Interchange)

[![USASCII_code_chart.png](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/scaled-1680-/BPS7ky8ruf98IYZ7-usascii-code-chart.png)](https://bookstack.jb-net.eu/uploads/images/gallery/2024-05/BPS7ky8ruf98IYZ7-usascii-code-chart.png)

[Weitere Informationen](https://www.ascii-code.com)