Algorithmen & Programmierung Zahlensysteme Bits und Bytes
Zahlensysteme Positionssystem Bei sogenannten Positionssystemen bestimmt (im Gegensatz zu additiven Systemen wie dem römischen Zahlensystem) die Position (Stelle) den Wert einer Ziffer. Es gibt eine Basis b und jede Position einer Ziffer entspricht einer Potenz der Basis b. Berechnung Für die Berechnung einer ganzen Zahl z mit n Ziffern multipliziert man jeweils die einzelnen Werte der Ziffern zi an Position i mit dem zugehörigen Positionswert b i und addiert anschließend die Produkte für die Positionen 0 i < n: z = zn-1b n-1 +... + zib i +... + z0b 0 Bedingung b muss mindestens zwei sein und die Ziffern laufen von 0 bis b 1 Anzahl darstellbarer Zahlen Mit n Positionen lassen sich genau b n Zahlen unterscheiden 202
Dualsystem Zahlensystem für Computer Da elektronische Rechenmaschinen im Allgemeinen nur die zwei Zustände Strom fließt bzw. Strom fließt nicht unterscheiden können, arbeiten sie auf Basis einen Zahlensystems, das nur zwei Zustände kennt - das duale (binäre) Zahlensystem. Eine n-stellige Zahl lässt sich im Dualsystem wie folgt darstellen: Konsequenz Bit z = zn-12 n-1 +... + zi2 i +... + z02 0 Mit n Stellen lassen sich 2 n unterschiedliche Zahlen ausdrücken. Eine Position (Stelle) einer Binärzahl wird als Bit bezeichnet. Ein Bit ist die kleinste Informationseinheit. Es gibt nur die Zustände an (1) oder aus (0) bzw. gesetzt (1) oder nicht gesetzt (0). 203
Dualsystem - Umwandlung Aufgabe Schreiben Sie ein C-Programm, das unter Verwendung der in der Vorlesung vorgestellten Funktion readint() eine Menge von Ziffern einer Dualzahl von der Tastatur einliest und ihren Dezimalwert auf dem Bildschirm ausgibt. Hinweise Die Ziffern der Dualzahl sind einzeln einzugeben (durch Leerzeichen voneinander separiert). Das Ende der Dualzahl ist durch Eingabe einer Ziffer größer 1 zu markieren Beispiel Geben Sie die Ziffern einer Dualzahl einzeln ein (Endmarkierung durch Ziffer>1)! 1 0 1 0 1 1 0 0 1 9 Die Dualzahl 101011001 besitzt den Dezimalwert 345. 204
Dualsystem - Umwandlung Problemanalyse Wir kennen im Vorhinein nicht die Stellenanzahl der Dualzahl und somit den Wert der einzugebenden Ziffern (zum Speichern der Bits fehlen uns momentan noch die Kenntnisse) Konsequenz Die Dualzahl muss schrittweise verarbeitet werden Frage Wie verändert sich der (Dezimal-)Wert einer Dualzahl, wenn ein weiteres Bit angehängt wird? Geben Sie die Ziffern einer Dualzahl einzeln ein (Endmarkierung durch Ziffer>1)! 1 0 1 0 1 1 0 0 1 9 Die Dualzahl 101011001 besitzt den Dezimalwert 345. 205
Byte Byte Ein Byte ist eine Binärzahl die aus genau acht Bits besteht. Konsequenz Es können 2 8 = 256 unterschiedliche Zahlenwerte ausgedrückt werden. Verwendung In Bytes wird die Speicherkapazität des Hauptspeichers (Primärspeicher) oder der Festplatte (Sekundärspeicher) angegeben. Vor allem aber basiert der interne Aufbau und die Verwaltung (z.b. von Datentypen) auf Bytes. Da C eine hardwarenahe Sprache ist, ist die Beschäftigung mit einigen Interna (z.b. des Speicherbedarfs und Speicherorts von Variablen) notwendig. 206
Kilobytes, Megabytes, Gigabytes... Turmbau zu Babel Leider gibt es bei der Benennung höherer Kapazitäten Mehrdeutigkeiten, so basieren die nächstgrößeren Einheiten entweder auf der Basis 1024 (Binär) oder 1000 (Dezimal). Obwohl es standardisierte unterschiedliche Bezeichnungen gibt, werden diese selten verwendet. So entspricht ein Kilobyte entweder 1024 1 Bytes oder 1000 1 Bytes ein Megabyte entweder 1024 2 Bytes oder 1000 2 Bytes ein Gigabyte entweder 1024 3 Bytes oder 1000 3 Bytes ein Terabyte entweder 1024 4 Bytes oder 1000 4 Bytes,... Hauptspeicherkapazitäten werden i.d.r. mit Hilfe der Basis 1024 angegeben. Festplattenkapazitäten werden i.d.r. mit Hilfe der Basis 1000 spezifiziert. 207
Hexadezimalsystem (Hex) Positionssystem mit Basis b = 16 Eine n-stellige Zahl lässt sich im Hexadezimalsystem mit Basis b=16 wie folgt darstellen: z = zn-116 n-1 +...+zi16 i +...+z016 0 Konsequenz Mit n Stellen lassen sich 16 n unterschiedliche Zahlen ausdrücken. Ziffern Das Hexadezimalsystem unterscheidet 16 Ziffern. Um keine Konfusion aufkommen zu lassen, werden die 10. bis zur 15. Ziffer mit Hilfe der Buchstaben A (10) bis F (15) dargestellt. 208
Hexadezimalsystem (Hex) Bedeutung des Hexadezimalsystems Das Hexadezimalsystem spielt eine große Rolle in der Informatik, denn ein Byte lässt sich mit genau zwei Hexadezimalziffern darstellen. Jede Ziffer des Hexadezimalsystems repräsentiert folglich ein Halbbyte (Tetrade = 4 Bit). Ausgabe von Hexadezimalzahlen in C Die Ausgabefunktion printf() besitzt eine Konvertierungsoption %X (erzeugt Großbuchstaben) bzw. %x (erzeugt Kleinbuchstaben), um Werte hexadezimal ausgeben zu können. Beispiel printf( %X%x%x%x, 10, 15, 15, 14) 209
Umrechnung einer Dezimalzahl Wunsch Umwandlung einer Dezimalzahl d10 in ein anderes Positionssystem der Basis b. Voraussetzung d10 = zn-1b n-1 +... + zib i +... + z0b 0 Umformung d10 = b (... ( b ( b ( b zn-1 + zn-2 ) + zn-3) +... ) + z1) + z0 Bestimmung der Koeffizienten Mit Hilfe einer wiederholten Division durch b lassen sich die Koeffizienten z0 bis zn-1 der Darstellung zur Basis b bestimmen. 210
Dual Hexadezimal Wunsch Manchmal benötigt man die Umwandlung von Dualzahlen in Hexadezimalzahlen und umgekehrt. Umwandlung via Dezimalsystem Mit unserem bisherigen Wissen können wir beide Umwandlungen durchführen, allerdings nur über den Umweg einer vorherigen Konvertierung ins Dezimalsystem. Allerdings ist dieser Zwischenschritt nicht notwendig. Umwandlung von Dual- in Hexadezimaldarstellung Jedes Halbbyte wird einzeln in seine korrespondierende Hexadezimalziffer umgewandelt. Umwandlung von Hexadezimal- in Dualdarstellung Jede Hexadezimalziffer wird in ein Halbbyte umgewandelt 211
Dual Hexadezimal Hex Halbbyte Dezimal 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 A 1010 10 B 1011 11 C 1100 12 D 1101 13 E 1110 14 F 1111 15 Praktisch Als praktisch erweist es sich, die Umwandlung von Hexdezimal- in Dualdarstellung und vice versa ziffernbzw. tetradenweise mit Hilfe der nebenstehenden Tabelle zu vollziehen. Dual Hex Die Halbbytes sollten immer aus Richtung der niederwertigsten Bits (rechts) in Richtung der höherwertigsten Bits (links) aufgebaut werden, da die Dualdarstellung nicht notwendigerweise aus einer durch vier teilbaren Stellenanzahl bestehen muss. 212
Ende der Vorlesung