Wie erkennt der Computer im Binärsystem wann Buchstaben und wann Zahlen gemeint sind?

7 Antworten

Der Computer weiß das nicht und erkennt es auch nicht selber. Wenn man sich eine Weile mit Assemblern und Opcodes (also Befehlen in Maschinensprache) beschäftigt, merkt man, dass so ein Computer wirklich unheimlich dumm ist und man alleine für den Weg, der nötig ist, um eine gedrückte Taste auf der Tastatur als Buchstaben auf dem Monitor erscheinen zu lassen, ein ganzes Buch schreiben könnte.

Kurz gesagt: Je nachdem, ob der Programmcode sagt "Schreibe das Zeichen an Speicherposition xy auf den Bildschirm" oder ob er sagt "Rechne die Zahl an Speicherposition xy in die ASCII-Repräsentation einer Ganzzahl um", wird der Wert entweder als Buchstabe oder Zahl angezeigt.

Wenn es eine Zahl ist, muss in dem Programmcode sogar noch stehen, wie viele Byte die Zahl beansprucht. Da der Speicherplatz heutzutage kein Problem mehr ist, werden Ganzzahlen in der Regel als 32-bit signed integer gespeichert. Deine Zahl ist aber eine 8-bit unsigned integer. Wenn man die mit den gleichen Befehlen berechnen würde, würde der Prozessor einfach die nächsten drei Bytes mit in die Berechnung aufnehmen und je nachdem, was da drin gespeichert ist, würde die Zahl halt komplett anders sein.

Es wird also ein kleines Programm benötigt, um den Hex-Wert 0x41 in die Zeichenfolge "65" (bzw. den Hex-Wert 0x3635) umzuwandeln, damit man die Zahl auf dem Bildschirm darstellen kann.

Wenn die Zahl Teil eines Textes ist, wie z.B. "Stau auf der A65 bei Ludwigshafen Richtung Landau", dann wird die 65 nicht als Zahl, sondern als Text im Speicher abgelegt und kann dadurch relativ einfach ausgegeben werden.

Hex:   2064 6572 2041 3635 2062 6569
Zeichen: d  e r    A  6 5    b  e i

Das muss man den Computer schon noch extra sagen, ob er den Binärwert 01000001 als Zahl 65 oder als Buchstabe A interpretieren soll. Falls Du gerade mit Word arbeitest landet vielleicht der Binärwert 01000001 als Buchstabe 'A' auf Speicherplatz 0x2000CC34 und falls Du gerade mit Excel arbeitest landet vielleicht die Zahl 65 als 01000001 auf Speicherplatz 0x200091FF . Darum sieht man zuweilen ja auch Datenmüll auf dem Bildschirm, wenn man eine Datei mit dem falschen Programm öffnet.

Kannst ja mal die Probe aufs Exempel machen. Du benennst einfach eine Exceltabelle in name.txt um und öffnest das mit dem Editor. Dann kommt sowas heraus:

?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñ˝yÄ7   Ã«ÈðÉ‚‹¨Þ ÿÿ PK    ! Ü…~U Þ   xl/workbook.xml¬UQo›:~Ÿtÿò;ƒMj:…@´JÛTõfÝK¥ÉS¬εM“ªÚß1   i»NW]·(±cóù;ç|çpú~×6ÎWZÈn†ð‰Þ²ÝÍ }Y-Ý)r´a]ÉÙñºç½?ûçÝéVªÛµ”· tz†jc6‰çé¢æ-Ó'rÃ;°TRµÌÀRÝxz£8+u͹i/ðýÈk™èÐ!Q¯ÁU%

Hier wurden Binärwerte einfach nur falsch interpretiert.

Woher ich das weiß:Berufserfahrung

Der Computer kann das nicht entscheiden, das kommt dann auf die Software an, die verschiedene Dinge auf unterschiedliche Weise behandelt.

Der Computer koennte z.B. dein Beispiel 01000001 speichern.

Ein Programm koennte diese Daten als unsigned Integer lesen und daraus schliessen, dass dies "65" ist. Ein anderes Programm koennte es jedoch als Zeichen lesen und als "A" interpretieren.

Das ist basierend auf dem Programm/Code, der es ausliest.

Beispiel:

int x = 65;

char c = 'a';

Im Memory wird genau das Selbe stehen, aber das Programm liest es je nach Datentyp unterschiedlich.

Edit: Falsch formuliert, er liest es nicht unterschiedlich, sondern verarbeitet es unterschiedlich und gibt es unterschiedlich aus. Lesen tut er es natürlich gleich.

Er erkennt es nicht. Für ihn sind das lediglich Einsen und Nullen.

Es ist an der Software dieses im jeweilig richtigen Kontext zu interpretieren. Dazu gibt es in den verschiedenen Programmiersprachen Datentypen.