Kurs:Wie funktioniert eigentlich ein Computer/Themen/Binär- , Hexadezimalcode und ASCII

Aus Wikiversity

Inhalt[Bearbeiten]

Zunächst stellen wir das Binärsystem und das Hexadezimalsystem vor und erklären, wie man Zahlen von einem System zu einem anderen umwandeln kann. Dannach stellen wir die Zeichencodierung ASCII vor und vergleichen die Dateigröße eines Maschincodes mit der einer Textdatei, die den Maschinencode in Hexadezimalschreibweise gespeichert hat. Zudem wird gezeigt, wie man es in Emacs umsetzten kann.

Dualsystem|Binärsystem[Bearbeiten]

Das Binär- oder Dualstystem besteht nur aus zwei Ziffern; 0 und 1. Um das System zu verdeutlichen, haben wir diese Tabelle erstellt:

27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1 Zahl im Dezimalsystem
0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 32 + 2 = 34
1 0 0 0 1 0 0 1 128 + 8 + 1 = 137
1 1 1 1 1 1 1 1 Σ = 255

Um zwischen den verschiedenen Zahlensystemen unterscheiden zu können, schreibt man hinter die Zahl einen Index. Im Binärsystem 2 , im Dezimalsystem 10 u.s.w. Man liest es dann als "10 zur Basis 2" .

Hexadezimalsystem[Bearbeiten]

Hexadezimalziffern, binär und dezimal:
Hex. Dualsystem Dez.
0 0 0 0 0 00
1 0 0 0 1 01
2 0 0 1 0 02
3 0 0 1 1 03
4 0 1 0 0 04
5 0 1 0 1 05
6 0 1 1 0 06
7 0 1 1 1 07
8 1 0 0 0 08
9 1 0 0 1 09
A 1 0 1 0 10
B 1 0 1 1 11
C 1 1 0 0 12
D 1 1 0 1 13
E 1 1 1 0 14
F 1 1 1 1 15


Im Hexadezimalsystem werden Zahlen in einem Stellenwertsystem zur Basis 16 dargestellt.
Es werden die Zahlen von 0 bis 9 verwendet und zusätzlich noch mit den Buchstaben von A bis F auf insgesamt 16 Zeichen erweitert. Wie man in der Tabelle sehen kann, steht das Zeichen einer einzelnen Zahl im Hexadezimalystem für die dementsprechend geleichwertige Zahl im Dezimalsystem. Die Buchstaben stehen deshalb für die darauf folgenden Zahlen.
Um eine Dezimalzahl in eine Hexadezimalzahl umzuwandel, kann man wie folgt vorgehen:
Falls die Zahl x nicht größer als 255 ist, hat die Hexadezimalzahl maximal zwei Stellen. Die vordere nimmt den Wert von (int) x/16 , die hintere von x%16 an.
Beispiel:

    x=9010
(int) 90/16= 5
90%16 = 10 = a
--> 9010 = 5a16

Um einen Binärcode in einen Hexadezimalcode umzuwandeln, teilt man den Binärcode in Viererpäckchen, von denen man jeweils die Hexadezimalzahlen bestimmen kann.
0001 11102=1E16

ASCII[Bearbeiten]

ASCII (American Standard Code for Information Interchange) ist eine 7bit Zeichencodierung und umfasst somit 128 Zeichen.

Tabelle, ASCII, Binary code, HEX

Da 128 Zeichen aber nicht reichten, wurden noch neue Codierungen wie der ANSI-CODE oder der UNI-CODE entwickelt.

Dateigrößen[Bearbeiten]

Wir haben bereits festgestellt, dass eine kompilierte Datei (Maschinencode) deutlich größer ist als der Quelltext (...). Aber kann man auch einen Unterschied zwischen der kompilierten Datei und dem als Text gespeicherten Maschinencode (in Hex-Schreibweise) der Datei feststellen?

Um dies festzustellen erstellen wir die dementsprechenden Dateien und vergleichen sie:

Vergleich der Größe einer Datei mit dem gespeicherten Hexcode der selben Datei

Wie man sehen kann ist die Textdatei erheblich groeßer.

Erklärung:

Um ein Byte Maschinencode zu speichern, braucht man logischerweise ein Byte Speicher (z.B. 01010011)

Wenn man sich jetzt diesen Code als Hexadezimalcode anzeigen lässt, erhält man die Ausgabe (53). Um diese Ausgabe in einer Textdatei(ASCII-Codierung) zu speichern, müssen wir also zwei Zeichen speichern, einmal die "5" und einmal die "3". Da wir den ASCII-Code benutzten, benötigen wir für jedes Zeichen 1 Byte, insgesamt also 2.

Um den Maschinencode in Hexadezimaldarstellung als Textdatei zu speichern benötigen wir also mehr Speicherplatz, als zum Speichern des Maschincodes als ausführbare Datei.

Hexadezimaldarstellung(in Emacs)[Bearbeiten]

Wenn man sich eine kompilierte Datei in Hexadezimaldarstellung anzeigen lassen möchte, muss man die entsprechende Datei zunächst öffnen (Strg-X Strg-F). Dannach kann man durch den Befehl (M-x hexl-mode) die Darstellung in eine Hexadezimaldarstellung ändern.