Zahlen- und Buchstabencodierung Zahlendarstellung

Werbung
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
Herunterladen