Dezimalsystem: Zahlen- und Buchstabencodierung Zahlendarstellung 123 = 1 10 2 + 2 10 1 + 3 10 0 1,23 = 1 10 0 + 2 10-1 + 3 10-2 10 Zeichen im Dezimalsystem: 0,1,...9 10 ist die Basis des Dezimalsystems Informatik: andere Zahlensysteme die besser verarbeitet werden können Dualsystem: Basis ist 2 Oktalsystem: Basis ist 8 Hexadezimalsystem: Basis ist 16 1 / 16 Gi_Vorlesung_03_2016
Dualsystem: Hexadezimalsystem: (0101)2 = 0 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = 4 + 1 = 5 (1111)2 = 1 2 3 + 1 2 2 + 1 2 1 + 1 2 0 = 8 + 4 + 2 + 1 = 15 2 Zeichen im Dualsystem: 0,1 2 ist die Basis des Dualsystems = verkürzte Schreibweise für das Dualsystem jeweils 4 Bit werden zusammengefaßt 16 Zeichen im Hexadezimalsystem: 0,1,...9,A,B,C,D,E,F 16 ist die Basis des Hexadezimalsystems (1F)16 = 1 16 1 + 15 16 0 = 16 + 15 = 31 2 / 16 Gi_Vorlesung_03_2016
Zusammenhang der Zahlensysteme: Binärzahl Hexadezimalzahl Dezimalzahl 0000 = 0 = 0 0001 = 1 = 1 0010 = 2 = 2 0011 = 3 = 3 0100 = 4 = 4 0101 = 5 = 5 0110 = 6 = 6 0111 = 7 = 7 1000 = 8 = 8 1001 = 9 = 9 1010 = A = 10 1011 = B = 11 1100 = C = 12 1101 = D = 13 1110 = E = 14 1111 = F = 15 10000 = 10 = 16 3 / 16 Gi_Vorlesung_03_2016
Umrechnung mit Hilfe der "Restwertmethode" 1. Beispiel: Umrechnung Dezimal nach Hexadezimal: Prinzip: (1) Die Dezimalzahl durch 16 teilen (2) Die Nachkommastellen mit 16 multipliziert gibt eine Ziffer (3) Die Stellen vor den Komma durch 16 teilen, weiter mit (2) Aufgabe: Die Dezimalzahl 808 soll in eine Hexadezimalzahl umgerechnet werden 808 / 16 = 50,5 0,5 16 = 8 (1. Ziffer) 50 / 16 = 3,125 0,125 16 = 2 (2. Ziffer) 3 / 16 = 0,1875 0,1875 16 = 3 (3. Ziffer) Ergebnis: (808) 10 = (328) 16 wichtig: Reihenfolge der Ziffern beachten, die niederwertigste Ziffer! 4 / 16 Gi_Vorlesung_03_2016
2. Beispiel: Umrechnung Dezimal nach Dual (Binärzahl) Das Verfahren funktioniert auch mit Binärzahlen, dann muß durch 2 dividiert werden: Beispiel: 808 / 2 = 404,0 0 2 = 0 (1. Ziffer) 404 / 2 = 202,0 0 2 = 0 (2. Ziffer) 202 / 2 = 101,0 0 2 = 0 (3. Ziffer) 101 / 2 = 50,5 0,5 2 = 1 (4. Ziffer) 50 / 2 = 25,0 0 2 = 0 (5. Ziffer) 25 / 2 = 12,5 0,5 2 = 1 (6. Ziffer) 12 / 2 = 6,0 0 2 = 0 (7. Ziffer) 6 / 2 = 3,0 0 2 = 0 (8. Ziffer) 3 / 2 = 1,5 0,5 2 = 1 (9. Ziffer) 1 / 2 = 0,5 0,5 2 = 1 (10. Ziffer) Ergebnis: (808) 10 = (11 0010 1000) 2 5 / 16 Gi_Vorlesung_03_2016
ÜBUNG Aufgabe 1: Wandeln Sie die folgenden Dezimalzahlen in Hexadezimalzahlen um. Wie lauten die zugehörigen Binärzahlen? a) 128 b) 256 c) 808 d) 2730 Aufgabe 2: Wandeln Sie die folgenden Zahlen in Dezimalzahlen um: a) (0000 0100) 2 b) (1000 1000) 2 c) (10) 16 d) (FFFF) 16 6 / 16 Gi_Vorlesung_03_2016
Verwendung von Hexadezimalzahlen in C: a) Hexadezimalzahl in eine Variable schreiben: Schreibweise: 0x... z.b.: 0x02 = 1 Byte, char-variable 0x3F2A = 2 Byte, short int-variable 0x2B003F2A = 4 Byte, int-variable Beispiel: int zahl; zahl = 0x1BFF000A; b) Zahl im Hexadezimalformat ausgeben: Platzhalter %X (Großbuchstaben) %x (Kleinbuchstaben) Beispiel: printf("%x Hex = %d Dez",zahl,zahl); ergibt: A Hex = 10 Dez 7 / 16 Gi_Vorlesung_03_2016
ÜBUNG Aufgabe: Geben Sie das Beispielprogramm ein und testen Sie es: #include <stdio.h> main() { char zahl = 0x41; printf("\ndezimal %d = Hexadezimal %X",zahl,zahl); zahl = zahl + 20; printf("\ndezimal %d = Hexadezimal %X\n\n",zahl,zahl); while(1); } 8 / 16 Gi_Vorlesung_03_2016
Buchstabendarstellung (Zeichencodes) Zeichencode = Zuordnung von Bitkombination zu Buchstaben willkürlich! für PC: ASCII -Code (American Standard Code for Information Interchange) andere: EBCDIC (IBM Großrechner) u.a. Variablentyp zum Abspeichern von Buchstaben: char = 8 Bit = 256 Möglichkeiten Beispiel: binär hexadezimal dezimal ASCII-Code 0100 0001 41 65 A 0100 0010 42 66 B 9 / 16 Gi_Vorlesung_03_2016
Verwendung von ASCII-Zeichencodes in C a) ASCII-Zeichencode in eine Variable schreiben Schreibweise: Beispiel: '...' char zeichen; zeichen = 'A'; in zeichen ist der ASCII Code für A also die Dezimalzahl 65 b) ASCII-Zeichencode ausgeben Platzhalter: %c Beispiel: printf("ascii %c = Dez %d",zeichen,zeichen); ergibt: ASCII A = Dez 65 10 / 16 Gi_Vorlesung_03_2016
Wichtig: Der Computer speichert nur Bitkombinationen Beispiel: Diesen Bitkombinationen werden Bedeutungen zugewiesen bzw. diese Bitkombinationen werden interpretiert. char zahl = 65; printf("%d",zahl); als Dezimalzahl dargestellt ergibt 65 printf("%x",zahl); als Hex-Zahl dargestellt ergibt 41 printf("%c",zahl); als ASCII-Zeichen dargestellt ergibt A zahl = zahl + 1; printf("%c",zahl); als ASCII-Zeichen dargestellt ergibt B 11 / 16 Gi_Vorlesung_03_2016
ÜBUNG Aufgabe 1: Geben Sie das Beispielprogramm ein und testen Sie es: #include <stdio.h> main() { char zahl = 0x41; printf("\ndezimal %d = Hex %X = Zeichen %c",zahl,zahl,zahl); zahl = zahl + 20; printf("\ndezimal %d = Hex %X = Zeichen %c\n\n",zahl,zahl,zahl); while(1); } 12 / 16 Gi_Vorlesung_03_2016
ÜBUNG Aufgabe 2: Schreiben Sie ein Programm, das eine Dezimalzahl von der Tastatur einliest und diese als Hexadezimalzahl und als Zeichen (d.h. das Zeichen, dessen ASCII-Code eingegeben wurde) auf dem Bildschirm ausgibt. Welcher Buchstabe wird mit folgenden Dezimalzahlen codiert: a) 97 b) 65 c) 48 d) 132 Hinweis: Eine Tabelle der ASCII-Codes finden Sie auf dem Web-Server 13 / 16 Gi_Vorlesung_03_2016
ÜBUNG Aufgabe 3: Schreiben Sie ein Programm, das ein Zeichen von der Tastatur einliest, den ASCII-Code in einer unsigned char oder int-variablen speichert (Wertebereich!) und den zugehörigen Zahlenwert als Dezimalzahl und als Hexadezimalzahl auf dem Bildschirm ausgibt. a) Welchen Zahlenbereich belegen die großen Buchstaben A - Z? b) Welchen Zahlenbereich belegen die kleinen Buchstaben a - z? c) Welchen Zahlenbereich belegen die Ziffern 0-9? d) Welchen Zahlen belegen die Umlaute ä,ü,ö,ä,ü,ö? 14 / 16 Gi_Vorlesung_03_2016
Grafische Darstellung des Programmablaufs Sinn: vor der Programmierung: Programmablauf entwerfen nachher: Dokumentation der erstellten Programme auch ohne Kenntnis der Programmiersprache verständlich Hilfsmittel: Flußdiagramme aus genormten Symbolen zusammengesetzt auch auf dem PC zu erstellen (z.b.: Anwendungsprogramm Flowcharter ) Symbole: Start Anweisungen Bedingung nein ja Ende Anweisungsblock Abfrage mit Sprung Beginn / Ende 15 / 16 Gi_Vorlesung_03_2016
Beispiel: (siehe Übung) Start main() { Variable zahl mit Wert 40 hexadezimal laden char zahl = 0x40; Zahl im Dezimalformat ausgeben Inhalt von zahl um 5 erhöhen Zahl im Dezimalformat ausgeben printf("%d",zahl); zahl = zahl + 5; printf("%d",zahl); Ende } 16 / 16 Gi_Vorlesung_03_2016