Es mag sich nach einer dummen Frage anhören, aber ich bin wirklich neugierig zu wissen, wie ein Computer diese kennt . Woher weiß ein Computer, dass die Reihenfolge der Ganzzahlen und des Alphabets A, B, C, D, ... ist? Ist es irgendwo in der Hardware gespeichert oder liefert das Betriebssystem diese Art von Informationen?1 , 2 , 3 , 4 , 5 , …
computer-architecture
reference-question
Ricky Stam
quelle
quelle
Antworten:
Zuerst werden Ihre Ganzzahlen in Binärzahlen umgewandelt. Beispielsweise wird die Ganzzahl 2 in 0010 konvertiert.
Die CPU verwendet einen digitalen Komparator :
In der Komparatorhardware werden einige Gatter verwendet (AND, OR, NAND, NOR, XOR usw.). Diese Gatter nehmen Binäreingänge an und geben ein binäres Ergebnis. Die Ausgabe ist aus einer Wahrheitstabelle ersichtlich.
Hier haben
0
&1
sind elektronische Spannungen für das Tor.1
- Stellt eine Schwellenspannung dar, die eine positive Spannung anzeigt.0
- Stellt die Spannung dar, die unter dem Schwellenwert liegt.Angenommen, ein Komparator arbeitet mit 5 Volt (dies wird zur Erklärung in Betracht gezogen), dann gilt: Eine
Spannung von mehr als 3 Volt kann als angesehen werden
binary-1
.Spannung unter 3 Volt gilt als
binary-0
Wenn ein Gatter einen Eingang als 3,5 Volt und einen anderen Eingang als 2 Volt erhält, wird ein Eingang als binär 1 und ein anderer Eingang als binär 0 betrachtet.
Diese Folgen von Einsen und Nullen werden sehr schnell durch den Schaltkreis geliefert.
Die Operation eines digitalen Zwei-Bit-Komparators kann als Wahrheitstabelle ausgedrückt werden:
So zitieren Sie aus Wikipedia :
quelle
Es "weiß" nicht nur, es prüft jedes Mal. Grundsätzlich macht es das Gleiche, was Sie tun würden: Um zu vergleichen, prüft es (von links), welche Zahl die erste Ziffer hat, die größer ist als die entsprechende in der anderen Ziffer. Natürlich müssen Sie der kürzeren Zahl führende Nullen hinzufügen.
Buchstaben sind nur Zahlen für den Computer. Menschen haben Buchstaben Zahlen, z. B. ASCII oder Unicode , zugewiesen, damit Zahlenvergleiche auch für Buchstaben die "richtige" Reihenfolge ergeben.
quelle
Es ist nicht das Betriebssystem, das ganze Zahlen vergleicht, die CPU kümmert sich darum. Es wurde auf der Ebene der logischen Gatter erstellt. Informationen dazu finden Sie auf diesen Folien .
Über das Alphabet werden in ASCII alphanumerische und andere Sonderzeichen als Ganzzahlen dargestellt, so dass das Vergleichen auch eine Ganzzahlvergleichsoperation ist, die von der CPU durchgeführt wird.
quelle
Eigentlich, und um ein vollständiges Bild davon zu erhalten, halte ich es für sehr hilfreich, den Datenpfad einer tatsächlichen CPU, beispielsweise MIPS, mit eigenen Augen zu sehen:
Wie Sie vielleicht sehen, gibt es tatsächlich einen zweiten Ausgang von der ALU, nämlich ein Signal namens Zero. Es ist vorhanden, um schnelle Verzweigungsoperationen durchzuführen, nachdem festgestellt wurde, ob die beiden Vergleichsoperanden gleich Null sind oder nicht , da es sich bei den meisten Vergleichen in einem Programm um Verzweigungen handelt. Wenn Sie daher eine Verzweigungsmöglichkeit in Ihrem Code erstellen, wie folgt:
if (a <b) {...}
Beachten Sie, dass das Signal Null einer der Eingänge des UND-Gatters ist, der bestimmt, woher der Programmzähler (PC) seinen Wert bezieht: Angenommen, das Verzweigungssignal ist '1', da wir eine Verzweigungsoperation haben
Hoffe, ich habe dir geholfen, "unter der Haube" zu sehen. Bitte fragen Sie nach weiteren Analysen zu diesem Thema. Viele Dinge sind für uns selbstverständlich, CPUs tun dies auf faszinierende Weise!
quelle
Wenn Sie wissen möchten, wie eine tatsächliche CPU dies tut, ist dies in etwa so.
Eine CPU arbeitet nur mit Zahlen bis zu einer bestimmten Größe. Heutzutage sind das normalerweise 64-Bit-Ganzzahlen (wir werden Gleitkommazahlen ignorieren; die Idee wird ähnlich sein).
Das sollten wir also erkennen
Eine CPU speichert Zahlen mit einer Länge von bis zu (sagen wir) 64 Bit im Binärformat (wahrscheinlich 2s-Komplement, aber es spielt keine Rolle, was passiert).
Eine CPU kann mit größeren Zahlen nichts anfangen. Wir müssen Softwarealgorithmen schreiben, wenn wir größere Zahlen vergleichen wollen.
Für größere Zahlen müssen wir jetzt etwas in Software implementieren, das diese kleinen Vergleiche als Subroutinen verwendet.
quelle
Lassen Sie mich zur Beantwortung dieser Frage zunächst darauf hinweisen, dass es mindestens zwei Abstraktionsebenen für die Vergleichsnummern auf einem Computer gibt, die Maschinenebene und die Softwareebene .
Zahlen auf Maschinenebene vergleichen
In heutigen Computern verfügt die CPU über einen umfangreichen Befehlssatz. Diese Anweisungen umfassen beispielsweise das Laden einer Speicherzelle in ein Register, das Inkrementieren eines Registers, das Hinzufügen von zwei Registern und vieles mehr. Es muss auch Anweisungen für bedingte Sprünge geben . Beispielsweise unterstützen die Prozessoren in der x86-Familie von Intel die Anweisungen
jnz
(Sprung, wenn nicht Null),jne
(Sprung ungleich) usw. Wenn diese fehlen würden, wäre die CPU nicht vollständig. Die Variablen, von denen der bedingte Sprung abhängt, werden in den Registern gespeichert. Daher sind diese Befehle in der Architektur der CPU als eine aus logischen Gattern aufgebaute Schaltung fest verdrahtet. Nur so kann die CPU zwei Zahlen vergleichen .Vergleichen von Zahlen auf Softwareebene
Wenn Sie zwei Zahlen vergleichen, beispielsweise in einem c ++ - Programm, wird dies in Maschinencode übersetzt und daher auf Maschinenebene ausgeführt. Ein solcher Vergleich kann jedoch komplexer sein. Es hängt wirklich vom verwendeten Datentyp ab, wie der Vergleich in Maschinencode übersetzt wird. Nur ein Beispiel: Die Zahlen, die Sie vergleichen möchten, stammen aus den 64-Bit-Wörtern, aber Ihr Computer arbeitet nur mit 32-Bit-Wörtern. Dann passt diese Nummer nicht in ein Register, daher zerlegt der Compiler den Vergleich in eine Folge von Vergleichen auf der Maschinencodeebene. Gleiches gilt für kompliziertere Datentypen / Datenstrukturen, die beispielsweise rationale Zahlen, Zeichenketten oder Zeichen darstellen. Wenn Sie also zwei Zeichen vergleichen müssen, müssen Sie dies per Software (Betriebssystem, Compiler, Interpreter, ...) in Maschinencode übersetzen.
Abschließend möchte ich darauf hinweisen, dass Standard-CPUs auch mit unterschiedlichen Darstellungen von Zahlen arbeiten können (vorzeichenbehaftete Ganzzahlen in 1- oder 2-Komplement-Darstellung, Floats). Vergleiche können auch in anderen Teilen des Computers wie der GPU durchgeführt werden.
quelle
andere antworten sind gut, wirf einfach eine andere raus, um weitere Überlegungen / Einblicke mit einem CS-Flair / Twist anzustellen. man kann eine FSM , eine endliche Zustandsmaschine, konstruieren , die zwei Binärzahlen beliebiger Länge vergleichen kann, wobei paarweise von den höchstwertigen Bits bis zum niedrigstwertigen Bit (LSB) begonnen wird. Es kann auch verwendet werden, um den digitalen Komparator zu konzipieren, der in einer anderen Antwort angegeben ist, jedoch erfordert der FSM keine Binärzahlen mit endlicher Länge. Es kann sogar ganze Zahlen mit binären Brüchen nach dem LSB verarbeiten. es hat ein induktives und rekursives Aroma und kann durch einfache Induktion als richtig erwiesen werden. es läuft wie folgt ab:
Mit anderen Worten, die größte Zahl ist diejenige mit dem ersten Auftreten eines Bits, das eins ist, und die andere ist null, nach einem anfänglichen Lauf von null oder mehr identischen Einsen. Ein digitaler Komparator endlicher Länge, der aus Gattern oder 1-Bit-Komparatoren besteht, beruht auf der Festlegung der Länge dieser FSM-Operation auf eine feste Anzahl von Bits. (Ja, es gibt eine starke Übereinstimmung zwischen allen endlichen Schaltungen und der "Festlegung der Länge" von FSM-Berechnungen.)
Dies mag wie eine theoretische Übung erscheinen, aber tatsächlich funktioniert die Logik in der Software zur Darstellung von Zahlen mit willkürlicher Genauigkeit etwas Analoges zu dieser FSM, außer dass sie in einer Computerschleife codiert ist, die als Schleife über die Schritte der FSM angesehen werden kann oder diese simuliert (eine effiziente Implementierung) könnte über einen Index die Position des MSB verfolgen).
Lassen Sie uns diese Frage auch so interpretieren / verallgemeinern, dass sie nicht auf ganze Zahlen beschränkt ist . Die Frage bezieht sich auf ganze Zahlen, aber der Titel bezieht sich nur auf Zahlen. überraschenderweise erwähnte bisher niemand eine Gleitkomma-Arithmetik .
quelle