GI 13.10.2016 Zahlen- und Buchstabencodierung Zahlendarstellung Dezimalsystem: 123 = 1 102 + 2 101 + 3 100 1,23 = 1 100 + 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: Oktalsystem: Hexadezimalsystem: 1 / 16 Basis ist 2 Basis ist 8 Basis ist 16 Gi_Vorlesung_03_2016 GI 13.10.2016 Dualsystem: (0101)2 = 0 23 + 1 22 + 0 21 + 1 20 = 4 + 1 = 5 (1111)2 = 1 23 + 1 22 + 1 21 + 1 20 = 8 + 4 + 2 + 1 = 15 2 Zeichen im Dualsystem: 0,1 2 ist die Basis des Dualsystems Hexadezimalsystem: = 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 161 + 15 160 = 16 + 15 = 31 2 / 16 Gi_Vorlesung_03_2016 GI 13.10.2016 Zusammenhang der Zahlensysteme: Binärzahl 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000 3 / 16 Hexadezimalzahl = = = = = = = = = = = = = = = = = 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 = = = = = = = = = = = = = = = = = Dezimalzahl 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Gi_Vorlesung_03_2016 GI 13.10.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 50 / 16 = 3,125 3 / 16 = 0,1875 0,5 16 = 8 0,125 16 = 2 0,1875 16 = 3 (1. Ziffer) (2. Ziffer) (3. Ziffer) Ergebnis: (808)10 = (328)16 wichtig: Reihenfolge der Ziffern beachten, die niederwertigste Ziffer! 4 / 16 Gi_Vorlesung_03_2016 GI 13.10.2016 2. Beispiel: Umrechnung Dezimal nach Dual (Binärzahl) Das Verfahren funktioniert auch mit Binärzahlen, dann muß durch 2 dividiert werden: Beispiel: Ergebnis: 5 / 16 808 / 2 = 404,0 404 / 2 = 202,0 202 / 2 = 101,0 101 / 2 = 50,5 50 / 2 = 25,0 25 / 2 = 12,5 12 / 2 = 6,0 6 / 2 = 3,0 3 / 2 = 1,5 1 / 2 = 0,5 0 0 0 0,5 0 0,5 0 0 0,5 0,5 2 2 2 2 2 2 = = = 2 = 2 = = 2 2 0 0 0 = 0 = 0 0 = = 1 1 1 1 (1. Ziffer) (2. Ziffer) (3. Ziffer) (4. Ziffer) (5. Ziffer) (6. Ziffer) (7. Ziffer) (8. Ziffer) (9. Ziffer) (10. Ziffer) (808)10 = (11 0010 1000)2 Gi_Vorlesung_03_2016 GI 13.10.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: 6 / 16 a) (0000 0100)2 b) (1000 1000)2 c) (10)16 d) (FFFF)16 Gi_Vorlesung_03_2016 GI 13.10.2016 Verwendung von Hexadezimalzahlen in C: a) Hexadezimalzahl in eine Variable schreiben: Schreibweise: Beispiel: 0x... z.B.: 0x02 = 1 Byte, char-Variable 0x3F2A = 2 Byte, short int-Variable 0x2B003F2A = 4 Byte, int-Variable int zahl; zahl = 0x1BFF000A; b) Zahl im Hexadezimalformat ausgeben: Platzhalter %X %x Beispiel: printf("%X Hex = %d Dez",zahl,zahl); ergibt: 7 / 16 (Großbuchstaben) (Kleinbuchstaben) A Hex = 10 Dez Gi_Vorlesung_03_2016 GI 13.10.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 GI 13.10.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: 9 / 16 binär hexadezimal 0100 0001 0100 0010 41 42 dezimal 65 66 ASCII-Code ‘A’ ‘B’ Gi_Vorlesung_03_2016 GI 13.10.2016 Verwendung von ASCII-Zeichencodes in C a) ASCII-Zeichencode in eine Variable schreiben Schreibweise: '...' char zeichen; zeichen = 'A'; Beispiel: in zeichen ist der ASCII Code für A also die Dezimalzahl 65 b) ASCII-Zeichencode ausgeben %c Platzhalter: Beispiel: printf("ASCII %c = Dez %d",zeichen,zeichen); ergibt: 10 / 16 ASCII A = Dez 65 Gi_Vorlesung_03_2016 GI 13.10.2016 Wichtig: Der Computer speichert nur Bitkombinationen Diesen Bitkombinationen werden Bedeutungen zugewiesen bzw. diese Bitkombinationen werden interpretiert. Beispiel: 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); 11 / 16 als ASCII-Zeichen dargestellt ergibt B Gi_Vorlesung_03_2016 GI 13.10.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 GI 13.10.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 GI 13.10.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 GI 13.10.2016 Grafische Darstellung des Programmablaufs Sinn: vor der Programmierung: nachher: Programmablauf entwerfen 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 nein Bedingung ja Ende Anweisungsblock 15 / 16 Abfrage mit Sprung Beginn / Ende Gi_Vorlesung_03_2016 GI 13.10.2016 Beispiel: (siehe Übung) Start Variable zahl mit Wert 40 hexadezimal laden main() { char zahl = 0x40; Zahl im Dezimalformat ausgeben printf("%d",zahl); Inhalt von zahl um 5 erhöhen zahl = zahl + 5; Zahl im Dezimalformat ausgeben Ende 16 / 16 printf("%d",zahl); } Gi_Vorlesung_03_2016