Wie kann ein Computer wissen, dass 1+1 = 2 ist? Es ist logisch und eine einfache Berechnung sowohl für einen Menschen als auch für einen Computer, aber wie kann ein Computer wissen, was der Wert 1 ist und dass 1+1 =2 ist?
Weil es so Elektrotechnik Ingenieure gibt, die genau diese Funktion in die Hardware des Rechner hineindesignt haben.
Ich werde jetzt nicht ganz unten anfangen und die Transistoren auslassen und eine Ebene höher anfangen nämlich auf der Ebene der logischen Gatter. So ein Gatter ist eine Schaltung mit mehreren Eingängen und einem Ausgang und einer genau definierten Funktion, wie der Ausgang von den Zuständen der Eingänge abhängt.
Fangen wir mal gleich mit einem Bildchen an:
Links seht Ihr eine Möglichkeit wie so ein Gatter in einem Schaltbild dargestellt werden kann. Ich bin altmodisch und darum verwende ich als Schaltsymbole die alten DIN 40700 Symbole, weil ich die am meisten mag. Wie auch immer, Ihr seht da zwei Eingänge (a,b) und einen Ausgang (z). rechts neben dem Schaltbild seht Ihr die Funktionsdefinition dieses Gatters. Zusammengefasst, wenn beide Eingänge entweder den Wert 0 oder den Wert 1 haben, dann hat der Ausgang den Wert 0 - wenn beide Eingänge unterschiedliche Werte haben, dann ist der Ausgang 1. Sollte eigentlich klar sein. Dieses spezielle Gatter mit dieser Funktion nennt man XOR-Gatter (exklusives Oder). Weil man die Funktion auch so ausdrücken kann: der Ausgang ist 1, wenn entweder der Eingang a 1 ist, oder der Eingang b (ODER) aber nicht beide (EXKLUSIV).
Dann brauchen wir noch ein UND-Gatter (englisch: AND):
Wichtig ist hier an der Funktionstabelle zu sehen, dass der Ausgang nur dann auf 1 ist, wenn beide Eingänge a und b gleichzeitig auf 1 sind. Darum UND->Gatter.
Jetzt sind wir schon soweit, dass wir zwei Bits addieren können:
Dazu schalten wir ein XOR- und ein AND-Gatter wie oben gezeigt zusammen und wenn wir jetzt ein wenig genauer hinschauen, dann addiert diese Schaltung die beiden Bits a und b zusammen und liefert zum einen ein Ergebnis (sum) und dazu auch noch einen Übertrag (carry) auf die nächst höhere Stelle. Wenn wird das ein wenig anders hinschreiben, wird es vielleicht klarer:
a + b = carry,sum
0 + 0 = 00
0 + 1 = 01
1 + 0 = 01
1 + 1 = 10
Dem einen oder anderen wird jetzt schon aufgefallen sein, dass wir zwar einen Ausgang haben für einen Übertrag in die nächst höhere Stelle, aber keinen Eingang für einen Übertrag der aus einer niedrigeren Stelle kommt. Auch das ist nicht weiter schwierig, das Problem kann man lösen indem man zwei Halbaddierer so zusammenschaltet, dass man am Ende zwei Bits + Übertrag addiert und raus kommt die Summe und ein Übertrag für die nächst höhere Stelle. Das wird dann Volladdierer genannt (und jetzt sollte auch klar sein, warum der Halbaddierer nur ein Halber ist :-))
Volladdierer:
Die HA in dem Bild sind zwei Halbaddierer und das Gatter ein ODER-Gatter und a,b und cin sind die Eingänge und sum und cout die Ausgänge.
Wenn man mehr als zwei Bits zusammenrechnen muss, dann kann man mehrere davon hintereinanderschalten bis man die notwendige Anzahl Bits addiert hat.
In Transistoren wäre so ein Volladdierer etwa 20 Transistoren und für das Addieren von zwei 64bit Zahlen bräuchte man dann halt so um die 1280 Transistoren. Oder eigentlich ein paar mehr, weil einfach nur Addierer kaskadieren bei längeren Zahlen recht langsam ist und es mit ein wenig mehr Aufwand an Gattern dann auch schneller machbar ist.
So, jetzt kannst du anfangen noch ein paar Milliarden Transistoren dazuzupacken und schon hast du einen modernen 64bit Prozessor mit allem drum und dran.
Ich hoffe, es ist auch klar geworden, dass ein Computer so gar nichts "weiß", nocht nicht einmal wie man zwei Bits addiert. Das ergibt sich von ganz alleine aus der richtigen Zusammenschaltung von Logik-Gattern. Nur richtig zusammenschalten muß man sie halt.
PS: Sorry für die Scheiß-Zeichnungen. Bin halt Elektrotechniker und kein Künstler.